Linux有趣的核心機制 OOM

2021-09-21 08:11:14 字數 1735 閱讀 3294

what(什麼是oom):

linux下面有個非常特別的機制叫oom killer(out of memory killer),這個有趣的傢伙會在系統記憶體耗盡的情況下跳出來,選擇性的乾掉一些程序以求釋放一些記憶體。預設具體的記錄日誌是在/var/log/messages中,如果出現了out of memory字樣,說明系統曾經出現過oom!

when(什麼時候出現):

linux下允許程式申請比系統可用記憶體更多的記憶體,這個特性叫overcommit。這樣做是出於優化系統考慮,因為不是所有的程式申請了記憶體就立刻使用的,當使用的時候說不定系統已經**了一些資源了。不幸的是,當用到這個overcommit給的記憶體的時候,系統還沒有資源的話,oom killer就跳出來了。

引數/proc/sys/vm/overcommit_memory可以控制程序對記憶體過量使用的應對策略

1.overcommit_memory=0,這是預設值,表示核心將檢查是否有足夠的可用記憶體**用程序使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用程序。

2.overcommit_memory=1,表示核心允許分配所有的物理記憶體,而不會檢查當前的記憶體狀態如何,換句話說就是來者不拒。這種策略適合那些不能承受記憶體分配失敗的應用,比如某些科學計算應用。

3.overcommit_memory=2,表示系統所能分配的記憶體不會超過swap+ram*係數(/proc/sys/vm /overcmmit_ratio,預設50%,你可以調整),如果這麼多資源已經用光,那麼後面任何嘗試申請記憶體的行為都會返回錯誤,這通常意味著此時沒法執行任何新程式。

how(系統會怎麼樣):

當然,如果觸發了oom機制,系統會殺掉某些程序,那麼什麼程序會被處理掉呢?kernel提供給使用者態的/proc下的一些引數:

1./proc/[pid]/oom_adj,該pid程序被oom killer殺掉的權重,一般介於 [-17,15](具體具體權重的範圍需要檢視核心確認)之間,越高的權重,意味著更可能被oom killer選中,-17表示禁止被kill掉。

通過2個步驟可以確認,具體權重的範圍:

①uname -a檢視linux核心版本

②進入/usr/src/kernels/核心版本/include/linux/oom.h確認具體的權重範圍

2./proc/[pid]/oom_score,當前該pid程序的被kill的分數,越高的分數意味著越可能被kill,這個數值是根據oom_adj運算(2ⁿ,n就是oom_adj的值)後的結果,本身oom_score是不能修改值。

下面的流程圖是out_of_memory的呼叫關係,觸發oom時會呼叫__out_of_memory函式。

__out_of_memory函式主要做了兩件事:

1.呼叫select_bad_process函式選擇乙個最優的程序殺掉

2.根據選擇的最優的程序,呼叫函式oom_kill_process,殺掉該程序。

so(我們能做什麼):

1.保護我們重要的程序,避免被處理掉

例項:ps -ef|grep gameserver(獲得重要程序的pid)

echo -17 > /proc/pid/oom_score_adj(輸入-17,禁止被oom機制處理)

2.開啟oom較為的保險機制

echo 「vm.panic_on_oom=2」 >> /etc/sysctl.conf

systcl -p

Linux核心OOM機制的理解

what 什麼是oom linux下面有個特性叫oom killer out of memory killer 這個東西會在系統記憶體耗盡的情況下跳出來,選擇性的乾掉一些程序以求釋放一些記憶體。具體的記錄日誌是在 var log messages中,如果出現了out of memory字樣,說明系統...

platform核心機制

platform 核心機制 guolele 2011.1.21 platform 是2.6 核心新引進的虛擬匯流排,而且現在有很多裝置驅動都是掛載在虛擬匯流排上,特別是幀緩衝裝置都是建立在平台匯流排基礎上,這也使得 lcd等圖形驅動也不可避免的使用平台匯流排,下面簡單分析一下平台匯流排的機制。首先先...

ETCD核心機制解析

etcd整體機制 etcd 是乙個分布式的 可靠的 key value 儲存系統,它適用於儲存分布式系統中的關鍵資料。etcd 集群中多個節點之間通過raft演算法完成分布式一致性協同,演算法會選舉出乙個主節點作為 leader,由 leader 負責資料的同步與分發。當 leader 出現故障後系...