Linux OOM killer機制說明

2021-09-18 05:48:26 字數 2233 閱讀 9615

1.什麼是oom-killer

oom_killer(out of memory killer)是linux核心的一種記憶體管理機制,在系統可用記憶體較少的情況下,核心為保證系統還能夠繼續執行下去,會選擇殺掉一些程序釋放掉一些記憶體。通常oom_killer的觸發流程是:程序a想要分配物理記憶體(通常是讀寫記憶體)->觸發缺頁異常->核心去分配物理記憶體->物理記憶體不足,觸發oom

1.1. oom-killer策略

linux下每個程序都有個oom權重,在/proc//oom_adj裡面,取值是-17到+15,取值越高,越容易被乾掉。oom killer選擇殺哪個程序,是基於它的badness score,該值體現在/proc//oom_score裡面。它的原則是,盡可能少殺程序來盡可能釋放出足夠多的記憶體,同時不去殺那些耗費記憶體很多的無辜程序。badness score的計算會用到程序的記憶體大小,cpu時間(user time + system time) 執行時間,以及oom_adj值。程序消耗的記憶體越多,得分就越高;程序執行的時間越長,得分就越低。

這也解釋了,為什麼新fork出來的程序容易被殺死,因為它的執行時間短,得分高

oom killer選擇程序的策略大致如下:

它必須擁有大量的頁框

殺掉這個程序只會損失少量的工作

它的靜態優先順序必須低(可以通過nice來給不重要的程序設定低的優先順序)

它不能夠擁有root許可權

它不能直接訪問硬體

2.什麼是overcommit

memory overcommit的意思是作業系統承諾給程序的記憶體大小超過了實際可用的記憶體。乙個保守的作業系統不會允許memory overcommit,有多少就分配多少,再申請就沒有了,這其實有些浪費記憶體,因為程序實際使用到的記憶體往往比申請的記憶體要少,比如某個程序malloc()了200mb記憶體,但實際上只用到了100mb,按照unix/linux的演算法,物理記憶體頁的分配發生在使用的瞬間,而不是在申請的瞬間,也就是說未用到的100mb記憶體根本就沒有分配,這100mb記憶體就閒置了。

unix/linux的記憶體分配策略是lazy的,申請的時候不會分配物理記憶體,只有在使用的時候才分配,為了盡可能地提高記憶體地利用效率,系統大部分情況下都會「答應」申請記憶體的要求。由於overcommit的存在,系統沒辦法在程序執行的時候就預判記憶體是否會耗盡,只有在真正分配記憶體的時候才會發現記憶體不夠。為了防止系統崩潰,觸發 oom killer強殺乙個或多個程序,以釋放部分記憶體。

2.2.overcommit策略

linux 2.6之後允許通過核心引數 vm.overcommit_memory 禁止memory overcommit。核心引數 vm.overcommit_memory 接受三種取值:

0 – heuristic overcommit handling. 這是預設值,它允許overcommit,但過於明目張膽的overcommit會被拒絕,比如malloc一次性申請的記憶體大小就超過了系統總記憶體。heuristic的意思是「試探式的」,核心利用某種演算法猜測你的記憶體申請是否合理,它認為不合理就會拒絕overcommit。

1 – always overcommit. 允許overcommit,對記憶體申請來者不拒。

2 – don』t overcommit. 禁止overcommit。

overcommit

的閾值在/proc/meminfo中指定,

是核心引數,預設值是50,表示物理記憶體的50%

附錄:vmstat、 sar、time、strace、pstree、top

vmstat、strace、top、ipcs、ipcrm、slabtop、cat /proc/meminfo、cat /proc/slabinfo、cat /proc//maps

vmstat、iostat、repquota、quotacheck

ifconfig、ethereal、iptraf、iwconfig、nfsstat、mrtg、ntop、netstat、cat /proc/sys/net

nice、renic、sysctl

記憶體效能調優工具

swapon、ulimit、sysctl

edquota、quoton、sysctl

Linux OOM Killer 保護機制

發表於 2018 12 25 更新於 2019 04 02 分類於 linux 閱讀次數 3 oom killer out of memory killer linux下允許程式申請比系統可用記憶體更多的記憶體,這個特性叫overcommit 過度分配 在系統記憶體耗盡的情況下,oom killer...

上位機 下位機

上位機是指 人可以直接發出操控命令的計算機,一般是pc,螢幕上顯示各種訊號變化 液壓,水位,溫度等 下位機是直接控制裝置獲取裝置狀況的的計算機,一般是plc 微控制器之類的。上位機發出的命令首先給下位機,下位機再根據此命令解釋成相應時序訊號直接控制相應裝置。下位機不時讀取裝置狀態資料 一般模擬量 轉...

上位機與下位機

上位機一般是集中管理監控機,下位機是指現場直接控制器或控制機。上位機面向管理級使用者,下位機面向底層裝置控制。上位機 上位監視系統,一般為計算機系統 監控軟體 下位機 控制系統的現場執行系統,一般為plc等裝置。上位機是指人可以直接發出操控命令的計算機,一般是pc,螢幕上顯示各種訊號變化 液壓,水位...