2011-03-05 35 views
3

在Windows中有系統維護的對象 - 事件,文件訪問句柄,窗口,定時器等,這些對象不是無限的,因此係統中的所有程序都可以創建不超過50k的對象(我不是確切的數字,但它不是非常關鍵的這個問題)。所以如果一些程序運行了很長時間並且創建了很多對象並且沒有釋放它們(就像內存泄漏一樣,但是這裏泄漏了系統對象),系統最終用完了對象和其他程序嘗試做某些事情需要創建任何新的系統對象,從系統功能開始獲取錯誤指示。例如,程序A運行並泄漏系統可用的所有對象,然後程序B嘗試打開文件並失敗,僅僅因爲系統沒有資源來處理該請求。此時唯一的解決方案是重新啓動程序A,以便泄漏的資源被系統回收。Unix/Linux系統是否容易泄漏全局內核對象?

在Unix/Linux系統上是否存在同樣的問題,或者它們在某種程度上受到保護?

+0

我不確定'泄漏'是否正確。也許'精疲力盡'會更準確。內核盡最大努力確保沒有資源泄漏 - 就像完全丟失資源一樣。對於那些消耗大量資源的惡意程序,它不能做太多的事情 - 除非確保在程序終止時清理亂七八糟的東西。而且,在Linux上,在內存濫用的情況下,它會啓動OOM殺手。 – 2011-03-05 14:22:43

回答

3

他們遇到同樣的問題,但可以在某種程度上被硬化/限制。通常默認情況下,每個進程的限制是方式低於會導致系統範圍問題的任何事情。你所要做的就是啓動很多過程。其中一些限制可以通過ulimit命令查看。某些* nixes有可能爲每個用戶設置限制(請參閱某些linux系統上的/etc/security/limits.conf)

但是,如果您刪除限制或者有大量進程正在執行不好的東西,對全系統的總限額通常是由可用資源(內存),如果你想要的資源限制的演示,在bash shell中運行this command看看

約束,如果你的系統仍然是可用的:

:(){ :|:& };: 
+0

警告:在某些unix系統上,fork炸彈會使操作系統完全無響應(需要重新啓動)。不要在家裏嘗試這種方式(更不用說在工作中)! – Gilles 2011-03-05 14:34:13

+1

我不知道表情符號可以殺死! – 2011-03-05 14:57:20

2

Unix/Linux中的兩個錯誤號是:

  • ENFILE(23):在系統打開的文件太多
  • EMFILE(24):打開的文件太多

第一個是系統級的限制,第二個每個進程限制。系統範圍的限制通常足夠大,以至於大多數系統現在都不會遇到它,但在PDP-11計算機的日子裏,它(ENFILE)是一個真正的問題。