記憶體不足時系統掛起
我有一個 eeePC 900a:它有一個 8GB 快閃記憶體作為磁碟,只有 1GB 記憶體。安裝在其上的 Linux 發行版是 ArchLinux。
當系統記憶體不足時,它會變得非常無響應:切換到 TTY1 甚至移動滑鼠指針等操作都需要幾秒鐘/幾分鐘的時間。有時看起來系統只是凍結了:在我們三個之前,我不管它,到目前為止什麼都沒有改變。
我寧願避免在這個 eeePC 上創建交換分區/文件,因為磁碟已經那麼小,而且因為交換空間上的許多寫入會大大縮短快閃記憶體卡的壽命。此外,我認為交換文件/分區只會移動問題,而不是肯定地修復它。
核心在記憶體不足時不應該殺死一些隨機應用程序嗎?為什麼這樣做會失敗(或需要很長時間)?
幾個月/幾年前,我已經嘗試對此進行進一步研究,但找不到任何實際可行的方法……
可以通過鍵盤組合直接呼叫OOM-killer(記憶體不足殺手):
SysRq-F
SysRq 鍵通常結合在鍵盤上的 PrtSc 鍵中。
OOM-killer 殺死一些程序(-es)並且系統再次響應。
感謝 Raman 在上面的評論中提供有關此功能的建議。
PS:這對我幫助很大。我同意這樣的觀點,如果它是由 Chrome 或任何記憶體貪婪軟體引起的,這是關於該問題的最有用的建議。但是您需要記住,OOM-killer 可能會殺死一些非常重要的程序,請謹慎使用。
事物的自然狀態是應用程序數據在 RAM 中,而文件在磁碟上。
就性能而言,理想的狀態是經常使用的數據在 RAM 中,而目前不需要的數據在磁碟上。
在普通系統上,核心會做兩件事來嘗試達到這個理想:
- 一段時間未使用的應用程序數據可以移動到磁碟:這就是交換。
- 最近使用的文件中的數據保存在 RAM 中:這是磁碟記憶體(用於從磁碟讀取的數據)和磁碟緩衝區(用於即將寫入磁碟的數據)。
在典型系統上,RAM 的很大一部分專用於高速記憶體和緩衝區(50% 是典型數字)。由於 RAM 是一種有限資源,這可能需要替換一些應用程序數據以進行交換(僅當有更好的方法使用 RAM 時才需要交換)。
在沒有交換的系統上,有時應用程序數據幾乎使用了所有 RAM,因此幾乎沒有任何記憶體空間。那麼系統很可能很慢。核心不會開始殺死應用程序,直到它真的必須這樣做。只要應用程序只填滿 99% 的可用記憶體,系統就會繼續執行,但速度非常慢,因為文件數據必須一直從磁碟載入和重新載入。在執行相同的應用程序的情況下,此時使用交換系統會更快。
有關此問題的更多資訊,請參閱此 lkml 討論和此部落格文章。
我不知道告訴核心為磁碟記憶體保留最少 RAM 的直接方法。您可以將 RAM 的一小部分設置為交換空間,甚至可以進行壓縮。在這方面有成功的報告,但我對你的具體情況不做任何保證。