OOM - Out of Mana法力耗盡。
出自於遊戲魔獸中的一種描述。
基本介紹
- 外文名:OOM
- 全稱:Out of Mana, Out of Memory等
- 釋義:法力耗盡
- 出處:魔獸世界
出處
面向對象方法
房奴
樂隊
音樂作品
- 音樂專輯共1張
- SECOND日語 歌曲6首發布於 2006-09-23
記憶體溢出
OOM killer
1. 為什麼會有OOM killer
當我們使用套用時,需要申請記憶體,即進行malloc的操作,進行malloc操作如果返回一個非NULL的操作表示申請到了可用的記憶體。事實上,這個地方是可能存在bug的。Linux有一種記憶體最佳化機制,即:允許程式申請比系統可用記憶體更多的記憶體,但是Linux並不保證這些記憶體馬上可用,如果湊巧你申請到的記憶體中在你需要使用的時候還沒有完全釋放出來,這個時候就會觸發OOM killer了。核心代碼為:mm/oom_kill.c,其調用順序為:
malloc -> _alloc_pages -> out_of_memory() -> select_bad_process() -> badness()
2. 如何選擇要kill掉的進程
分析badness代碼,其選擇過程如下:
1)計算該進程以及其子進程所占用的記憶體;
2)計算CPU時間和存活時間
3)做相應的權重調整
總結起來,就是占用記憶體越高,得分越高,cpu時間和存活時間越高,得分越低;進程優先權越高,得分越低
綜合上述因素後,會得到一個point的值,得分最高的會被選中,然後被kill掉。