Linux OOM キラーによって、どの特定の Python プロセスまたは実行可能ファイルが終了したかを調べようとします。
/var/log/messages に以下が表示されます。
Aug 18 03:19:11 169 kernel: [ 7747] 0 7748 3226957 2875051 5692 0 0 python
(単にname = "python"とのみ出ています。)
これ:
Aug 18 03:19:11 169 kernel: Killed process 7748 (python) total-vm:12907828kB, anon-rss:11500204kB, file-rss:0kB
(もう一度申し上げますが、プロセスが「Python」となっています。)
理想的には、プロセスのログファイルのどこかにPIDを含める必要があります。ただし、ログがラップされていると仮定した場合(またはプロセスがどこにもPIDを記録しないと仮定)。
Linuxは、プロセスで実行される完全なコマンドを見つける方法を提供しますか?プロセステーブルにフルネームを表示するようにLinuxのOOM Killerを設定できれば良いでしょう。たとえば、次のようになります。
/usr/bin/python /usr/lib/python2.7/site-packages/foo.pyc
それとも、OOMエラーが発生したときにLinuxにいくつかのプロセスの詳細がどこかに保存されていますか? /procからXにプロセスをコピーしていますか? (迷惑)
メモ:
この質問は次の質問によく似ています。https://stackoverflow.com/questions/624857/finding-which-process-was-killed-by-linux-oom-killer
しかし、それは私が理解しようとしていることを達成しません。
答え1
Linuxは、OOM Killerがプロセスを終了しようとしている場合、またはすでにプロセスを終了している場合、この情報クエリをサポートしません。
必要に応じて、システムを継続的に監視し、タイムスタンプとPID、およびコマンドライン全体を使用して各プロセスを記録できます。バラよりhttps://stackoverflow.com/a/8255487/334451実装例
後でどのプロセスが終了するかを事前に知ることができないため、すべてのプロセスに関する情報を保存し、OOM Killerの終了以外の理由でプロセスが停止するまでその情報を保持する必要があります。