カーネルが強制終了したプロセスを確認する方法はありますか?ときどきサーバーにログオンして、一晩中実行する必要のあるものが8時間停止しただけで、それが実行中のアプリケーションなのかカーネルなのかわかりません。
カーネルがプロセスを強制終了した場合(システムがメモリ不足になったため)、カーネルログメッセージが表示されます。チェックイン /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
ファイルには終了ステータスに関する情報が含まれていますが、lastcomm
もsa
も出力していないようです。
したがって、私が見る限り、情報にアクセスするには独自の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
最小限のテストのみ。