Linux程序被殺掉(OOM killer),檢視系統日誌
阿新 • • 發佈:2018-12-18
程式運行了一段時間,有2個程序掛掉了,正常情況下程序不會主動掛掉,簡單分析後認為可能是執行時某段時間記憶體佔用過大,系統記憶體不足導致觸發了Linux作業系統OOM killer機制,將執行中的程序殺掉了。
Linux 核心有個機制叫OOM killer(Out Of Memory killer),該機制會監控那些佔用記憶體過大,尤其是瞬間佔用記憶體很快的程序,然後防止記憶體耗盡而自動把該程序殺掉。核心檢測到系統記憶體不足、挑選並殺掉某個程序的過程可以參考核心原始碼linux/mm/oom_kill.c,當系統記憶體不足的時候,out_of_memory()被觸發,然後呼叫select_bad_process()選擇一個”bad”程序殺掉。如何判斷和選擇一個”bad程序呢?linux選擇”bad”程序是通過呼叫oom_badness(),挑選的演算法和想法都很簡單很樸實:最bad的那個程序就是那個最佔用記憶體的程序。
檢視系統日誌方法:
執行egrep -i -r 'killed process' /var/log
命令,結果如下:
也可執行dmesg
命令,結果如下: