時にはCPUの100%を占め、温度を約30℃まで上げる不良なJavaプロセスがあります(通常、シャットダウンしないと競合が発生します)。
問題はすぐに終了する必要があるため、実際にそれを識別したり(パラメータと項目の長いリストがある)分析できないことです。
過去に終了したプロセスのIDを確認するために表示できるログの種類はありますか?そうでない場合は、次にプロセスが発生したときにプロセスをキャプチャする方法はありますか?
重要な場合は、OpenSuse 11.4を使用しています。
答え1
いいえ、デフォルトではありません。ロギングが多すぎます(特にログエントリを作成するロギング操作を開始する場合...)。
BSDプロセス会計(使用可能な場合は実行lastcomm
)、有効な場合は実行された各コマンドの名前といくつかの基本統計を記録しますが、引数は記録しません。
これ監査サブシステムより多様で柔軟になりました。audit
パッケージをインストールして読んでくださいSuSE監査ガイド(主に約ルール)または試してみてください。
auditctl -A exit,always -F path=/usr/bin/java -S execve
または:殺すのではなくkill -STOP
殺してください。これ止める質問なしでプロセスを一時停止します。後で再開(kill -CONT
)または終了()できます。kill -KILL
プロセスがまだ存在する限り、対応するコマンドライン(/proc/12345/cmdline
)、メモリマップ(/proc/12345/maps
)などを調べることができます。
または、プロセスにデバッガを接続して一時停止します。これは非常に簡単ですgdb --pid 12345
(Javaプロセスにはより良いオプションがあるかもしれません)。デバッガを接続すると、プロセスはすぐに一時停止します(デバッガを終了すると、プロセスはSIGCONTを受信して再起動します)。
これはすべて、JVMスレッドではなくオペレーティングシステムレベルのプロセスのみをキャプチャします。スレッドをデバッグするには、JVM機能を使用する必要があります。