【開発経験】Javaサービス本番環境でのCPU使用率の問題を解決する方法


        Javaサービス本番環境のCPUが突然増加し、ログクエリが失敗した場合、JVMデバッグツールを使用して問題を特定できます。

アイデア

Javaサービスプロセスを見つけます->Javaスレッドを見つけます->コードブロックを見つけます

1.Javaサービスプロセスを見つけます

サーバーには複数のJavaサービスがある場合があります。このコマンドを使用しtopて、CPU使用率が最も高いサービスを確認します。CPU使用率が高いPID番号を覚えておいてください。

画像-20211102145534739

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进制ます。

画像-20211102151016912

対応するスレッド情報を検索すると、コードの例外情報を直感的に確認できます。

springbootのwhileループでテストできます。

@GetMapping ("/while")
public void while1(){
    
    
   log.info ("while!~~~~~~~~~");
    while (true){
    
    

    }
}

おすすめ

転載: blog.csdn.net/qq_30285985/article/details/121101267