Linux OOM 磁碟 I/O。另外:交換,有什麼用?
我在我的一個 Linux (2.6.37) 安裝中遇到了 OOM 殺手的問題。這台電腦有 4GB 的記憶體,我有時會充分利用它。在這些情況下,我希望 OOM 處理程序通過殺死一兩個程序來完成其工作。而不是這樣做,或者可能在嘗試這樣做時,系統鎖定,像沒有明天一樣進行磁碟 I/O。事情是這樣的:我沒有啟用任何交換。出於某種原因,我的無交換系統仍然被大量的磁碟 I/O 鎖定,即使適當的做法是只殺死一兩個程序。想法?
整個問題讓我想知道 Linux 是否需要以某種我不知道的方式進行交換。解釋是否是這種情況以及為什麼將不勝感激。我熟悉概念級別的交換(即虛擬記憶體、分頁、過度使用)的想法,但我想知道是否有任何我可能遺漏的實現細節。
真正的問題是,你為什麼在沒有交換的情況下執行?特別是如果您看到與 RAM 用盡相關的(嚴重)性能問題?您知道沒有交換實際上會使您的系統變慢,對嗎?
顯而易見的解決方案是添加一些交換空間,而不是讓您的系統崩潰。考慮到磁碟空間是多麼的便宜,我想不出任何常見的情況1您應該在沒有交換的情況下建構系統。
至於回答你的問題,我不記得為什麼交換很重要的所有低級細節,即使在你不會耗盡記憶體的系統上,但 Linux 核心郵件列表上關於是否在沒有交換的情況下執行系統是合理的(並且沒有很多確鑿的答案)。一般的共識通常是始終擁有 swap,並根據需要調整 swapiness。
另外,我認為您誤解了有關 Linux OOM 殺手的一些重要警告。首先,依靠它來處理您的記憶體不足問題是一個非常糟糕的主意(tm)。它可能非常不分青紅皂白地殺死什麼,並且完全有可能留下一個不穩定甚至無法使用的系統。是的,它試圖殺死正在消耗大量記憶體的最近程序(試圖捕捉失控程序的小安全措施),但不能保證。我見過它殺死 ssh,殺死 Xen 程序(在 Xen 虛擬主機伺服器上,導致 VM 崩潰),並且在一種情況下它殺死了 NFS。
至於IO。. . 我不確定是什麼原因造成的。也許文件系統或磁碟相關的程序被殺死了?當一個程序無法分配足夠的記憶體時,也許它內置了某種“記憶體到磁碟”功能?
另請注意,如果這是台式機,則 Suspend to Disk 需要交換。如果它是伺服器,那麼依賴 OOM絕不是一個好主意,因為它會損害穩定性,好吧,根本沒有充分的理由。
$$ 1 $$嵌入式系統是唯一明顯的例外,它們並不是特別常見(如果您正在處理嵌入式系統,您已經知道這些要求了)。