2012-06-06 128 views
1

我有興趣通過分配大量文件描述符並導致文件描述符失敗而導致系統關閉(例如15分鐘)。 (不要擔心,我不會試圖破解任何東西,這是爲了測試我正在寫的服務......以查看它在其他程序中行爲不正常的行爲。)有什麼最佳實踐?我應該繼續說fopen()在一個無限循環? 15分鐘後,我可以殺死這個過程?有沒有人有這方面的經驗?分配大量文件描述符

更新:我正在運行Linux,我正在編寫的程序將具有超級用戶權限。

感謝, 〜瑜伽士

+0

您沒有指定您正在討論的操作系統,但可能打開大量文件描述符只會導致打開它們的進程出現「打開的文件過多」的錯誤,而不是「自帶系統關閉「。 –

+0

是不是。每個進程打開文件描述符的基礎? – tuxuday

回答

0

我不得不在正常使用該發生一次。我相信你在Linux中運行inode。我不知道一個更快的方式,只是打開文件。小心點,我們鎖定了我們的系統。一段時間之前,我不記得試圖打開一個文件是什麼,但事情通常認爲他們可以得到一個文件句柄,在他們不能的情況下,他們的表現不如他們應該的。 〜本

0

我的2美分:

1.編寫一個程序,創建大量的文件描述符。您可以通過以下方法之一實現它:

(一)開幕很多不同的文件在你的代碼
(b)打開了很多插座描述符的

(三)創建了很多線程

2.現在,繼續使用shell腳本或類似的東西來產生在步驟1中創建的程序的多個實例(即創建多個進程)。

注: 在Linux和大多數其他操作系統,對文件描述符的數量每個進程(在Linux默認的限制是1024我想你可以使用檢查的ulimit -a )。所以,當你這樣做時,你的過程就會失敗。我真的不太確定,只是通過增加文件描述符的使用數量,可以使系統停機。

+0

我在想如果他們試圖寫或讀任何東西,系統將變得可用於其他進程。 –

2

您是否考慮在運行程序之前使用setrlimitRLIMIT_NOFILE降低文件描述符限制?

這可以簡單地用bash的ulimit-n內置來完成,在測試您的應用程序相同的外殼,例如:

ulimit -n 32 

,它不會干擾很多很多其他的服務已經在運行。降低該限制會使您的應用程序(運行在同一個shell中)快速受到傷害(用於測試目的)。

在整個系統級別上,您可能還會寫入/proc/sys/fs/file-max

echo 1024 > /proc/sys/fs/file-max 
0

您可以使用mkstemp來獲取臨時文件的文件描述符。