web-dev-qa-db-ja.com

カーネルが強制終了したプロセスのリストはどこにありますか?

カーネルが強制終了したプロセスを確認する方法はありますか?ときどきサーバーにログオンして、一晩中実行する必要のあるものが8時間停止しただけで、それが実行中のアプリケーションなのかカーネルなのかわかりません。

33
Kit Sunde

カーネルがプロセスを強制終了した場合(システムがメモリ不足になったため)、カーネルログメッセージが表示されます。チェックイン /var/log/kern.log(Debian/Ubuntuでは、他のディストリビューションはカーネルログを別のファイルに送信することがありますが、通常は/var/log(Linuxの場合)。

OOMキラー(メモリ不足キラー)がトリガーされた場合、十分な仮想メモリがないことを意味します。スワップ(またはおそらくRAM)を追加します。

一部のプロセスクラッシュもカーネルログに記録されます(セグメンテーションエラーなど)。

プロセスがcronから開始された場合は、エラーメッセージが記載されたメールが必要です。プロセスが端末のシェルから開始された場合は、その端末のエラーを確認してください。 screenでプロセスを実行して、午前中にターミナルを再度表示します。 OOM-killerがトリガーされた場合、cronまたはscreenプロセスも強制終了された可能性があるため、これは役に立たない可能性があります。しかし、OOMキラーに遭遇した場合、それは修正する必要がある問題です。

ここでプロセスアカウンティングが役立ちます。

簡単に言えば:

apt-get install acct

次に、次のようなコマンドを試してください:

lastcomm
sa

またはUbuntu:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

見る:

更新

不思議なことに、pacctファイルには終了ステータスに関する情報が含まれていますが、lastcommsaも出力していないようです。

したがって、私が見る限り、情報にアクセスするには独自のCプログラムを作成する必要があります。

アップデート2

これは、終了コードを出力するバージョンです。

最後の2つのフィールドは、シグナルの場合は「S」、終了の場合は「E」で、その後にシグナル番号または終了状況が続きます。

したがって、あなたのケースでは、おそらく「S 15」がSIGTERMを取得したことを意味します。

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15

エラーなしでプロセスが終了したことを意味する「E 0」と比較。

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0

最小限のテストのみ。

12
Mikel