簡介
OOM Killer(Out-of-Memory Killer,記憶體不足終止器)是 Linux 中的關鍵機制,在系統記憶體耗盡時介入。它會終止處理程序以釋放記憶體並保持系統運作。雖然在記憶體不足的情況下它是救星,但它的行為有時看起來似乎是隨意的或令人困惑的。
為了幫助您理解 OOM Killer 背後的概念,這裡有一個涉及飛機、乘客和燃油短缺的有趣類比。
什麼是 OOM Killer?
當系統記憶體耗盡並需要回收資源時,OOM Killer 就會被啟動。它使用評分系統,根據記憶體使用量、優先順序和對系統的重要性等因素來決定終止哪個處理程序。
圖解:透過飛機類比理解 OOM Killer
想像一下,一家航空公司發現少帶燃油飛行更便宜。雖然這樣可以省錢,但偶爾會在飛行途中出現燃油短缺。為了防止墜毀,工程師們開發了一種叫作OOF(Out-of-Fuel,燃油耗盡),它會將乘客彈出以減輕重量並延長飛行時間。
在緊急情況下,一名乘客會被選中並扔出飛機。困境就在這裡:
- 應該彈出誰?應該是隨機的,還是應該優先考慮體重較重的乘客?
- 乘客應該付費以避免被彈出嗎?
- 如果選中的是飛行員會怎樣?
隨著時間的推移,工程師們不斷改進這個系統,但它偶爾還是會出故障——即使沒有燃油短缺,也會彈出乘客。這個幽默的類比反映了OOM Killer所面臨的挑戰:它有時會在系統記憶體並非嚴重不足時意外終止處理程序。
OOM Killer 在 Linux 中的運作方式
OOM Killer 使用評分系統來決定終止哪個處理程序。考慮因素包括:
- 記憶體使用量:佔用記憶體最多的處理程序最可能成為目標。
- 優先順序:低優先順序的處理程序更可能被終止。
- 關鍵性:對系統關鍵的處理程序(如核心)通常會被放過。
當 OOM Killer 被觸發時,它會終止處理程序以釋放記憶體並恢復系統穩定性。
管理 OOM Killer
如果您在雲端環境或本地基礎設施中執行 Linux,瞭解和管理 OOM Killer 至關重要。以下是一些提示:
1. 調整 OOM 分數
您可以透過調整處理程序的oom_score_adj值來影響 OOM Killer 的行為。分數越低,處理程序被終止的可能性就越小。
範例命令:
echo -1000 > /proc/<pid>/oom_score_adj
2. 監控記憶體使用情況
使用htop、free或vmstat等工具,在 OOM Killer 介入之前監控記憶體使用情況並識別佔用資源較多的處理程序。
3. 分配交換空間
新增交換空間可以透過提供額外的虛擬記憶體,幫助降低出現 OOM 情況的可能性。
建立交換檔案的範例命令:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
4. 使用文件與日誌
檢查系統日誌(/var/log/syslog或dmesg),以瞭解 OOM Killer 被觸發的原因以及哪些處理程序受到了影響。
參考資料
有關 OOM Killer 與 Linux 記憶體管理的更多詳情,請造訪: