Javaサービス本番環境のCPUが突然増加し、ログクエリが失敗した場合、JVMデバッグツールを使用して問題を特定できます。
アイデア
Javaサービスプロセスを見つけます->Javaスレッドを見つけます->コードブロックを見つけます
1.Javaサービスプロセスを見つけます
サーバーには複数のJavaサービスがある場合があります。このコマンドを使用しtop
て、CPU使用率が最も高いサービスを確認します。CPU使用率が高いPID番号を覚えておいてください。
2.スレッドIDを見つけます
各Javaサービスで実行されているスレッドは多数あり、ps H -eo pid,tid,%cpu --sort=%cpu |grep [PID]
CPU使用率が高いスレッドを見つけることができます。
[root@]# ps H -eo pid,tid,%cpu --sort=%cpu |grep 20443
20443 22263 0.0
20443 20469 0.3
20443 20451 0.4
20443 20466 0.6
20443 20468 0.6
20443 20467 50.0
上の図に示すように20467
、スレッドのCPU使用率が高く、どのコードが最も使用されているかを確認できます。
3.コードブロックを見つけます
スレッドのjstack [PID]
実行状態は下図のように表示できますが、煩雑で、に20467
変換して検索し16进制
ます。
対応するスレッド情報を検索すると、コードの例外情報を直感的に確認できます。
springbootのwhileループでテストできます。
@GetMapping ("/while")
public void while1(){
log.info ("while!~~~~~~~~~");
while (true){
}
}