Linux OOMキラーによって強制終了されたプロセスを見つける


172

Linuxがメモリ不足(OOM)になると、OOMキラーはいくつかのヒューリスティックに基づいて強制終了するプロセスを選択します(興味深い記事です:http : //lwn.net/Articles/317814/)。

OOMキラーによって最近強制終了されたプロセスをプログラムで判別するにはどうすればよいですか?

回答:


171

これを試してください:

grep -i 'killed process' /var/log/messages

18
FWIW、私はそれらのメッセージをsyslogまたはkern.logで取得しますが、/ var / log / messagesでは取得しません
jberryman

36
「egrep -i -r 'killed process' / var / log /」を使用して、他の場所でも検索できます。
メトス'27

5
@jberryman:何らかの理由で、syslogは/var/log/syslog一部のディストリビューションと/var/log/messages他のディストリビューションにあります。前者はDebian、後者はRed HatであるBICBWだと思います。
トムアンダーソン

5
"dmesg | egrep -i 'killed process'"そして、どこでも(アーカイブされたログを含む)ログを検索できます:)
John D

2
egrepここでは意味がありません。普通のgrep、または具体的に言うとfgrep、はるかに理にかなっています。(それに応じて回答を編集します。)
antak

148

ログの場所を気にする必要がないように、これを試してください

dmesg | egrep -i 'killed process'

1
これも便利ですが、残念ながら説明できません/var/log/messagesが、dmesg/に表示されないという結果が表示されてい/var/log/dmesgます。構成の誤りの可能性もありますが、両方のアプローチを使用することをお勧めします。
kungphu 2016年

3
ログファイルについては不明ですが、dmesgの出力は制限されたサイズのリングバッファーからのものです。oom-killer以降に他のものがバッファーを満たしている場合、oom-killerの出力は失われます。
Dan Pritts

これが、OpenVZコンテナでプロセスが強制終了されたことを確認する唯一の方法でした
igo

16
dmesg -T読み取り可能なタイムスタンプを取得するために使用することもお勧めします
gukoff

2
/ var / log / messagesと比較して、これにはroot権限を必要としないという利点があります
Kineolyan

52

現在、dstatは、実行中のシステムで、oomメカニズムによって強制終了される候補となるプロセスを見つける機能を提供します

dstat --top-oom
 --out-of-memory---
  kill score
 java           77
 java           77
 java           77

とmanページに従って

  --top-oom
          show process that will be killed by OOM the first

この情報は、スコアの意味がわからなければ意味がなく、どこにも文書化されていません。あなたが見るかもしれないすべてはスコアの増加、そしてそれからプロセスが殺されているので、多分それはoom killerだったのかもしれませんし、多分それは何か他のものだったのかもしれません、確かな方法はありません。
ローレント

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.