歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux如何使用OOM killer 機制?

  OOM killer 機制就是Linux殺死進程的以個機制,如果進程損壞系統資源到底某種程度,OOM killer 機制就會強制殺死進程。本文就來介紹一下Linux如何使用OOM killer 機制。

Linux如何使用OOM killer 機制?

  簡單來說該機制會監控那些占用內存過大,尤其是瞬間很快消耗大量內存的進程,為了防止內存耗盡而內核會把該進程殺掉。

  這個功能即使在無法釋放內存的情況下,也能夠重復進行確保內存的處理過程,防止系統停滯,還可以找出過度消耗內存的進程。

  典型的情況是:某天一台機器突然ssh遠程登錄不了,但能ping通,說明不是網絡的故障或者機器down掉,很大可能是sshd進程被 OOM killer殺掉了。

  重啟機器後查看系統日志/var/log/messages會發現 Out of Memory: Kill process 247(sshd)類似的錯誤信息。

  還有另外一種情況也會導致能ping不能ssh,就是網絡連接過多把系統文件描述符資源耗盡,這裡暫時不考慮這種情況。

  而在使用vip的高可用方案中,這種情況也很容易出現腦裂的現象。

  防止重要的系統進程觸發(OOM)機制而被殺死:可以設置參數/proc/PID/oom_adj為-17,可臨時關閉linux內核的OOM機制。內核會通過特定的算法給每個進程計算一個分數來決定殺哪個進程,每個進程的oom分數可以/proc/PID/oom_score中找到。

  我們認為重要的進程有sshd,或者一些監控守護進程,大家可以根據自己實際情況選擇需要保護的進程。

  保護某個進程不被內核殺掉可以這樣操作:

  echo -17 》 /proc/$PID/oom_adj

  可以寫一個簡單的腳本,部署在crontab上防止重要進程被oom

  pgrep -f “/usr/sbin/sshd” | while read PID;do echo -17 》 /proc/$PID/oom_adj;done

  其中的“/usr/sbin/sshd”可以替換為你認為重要的進程,不過在匹配時候注意不要匹配錯了

  1.進程的選定方法

  OOM Killer在內存耗盡時,會查看所有進程,並分別為每個進程計算分數。將信號發送給分數最高的進程。

  2.計算分數的方法 上一頁12下一頁共2頁

Copyright © Linux教程網 All Rights Reserved