この記事の内容は、Java プロセスの CPU 使用率が 100% になる場合のトラブルシューティング方法についてです。一定の参考値があり、困っている友人は参考にしてください。あなたは助けてくれました。
100% は CPU の 1 つのコアを占有することを指し、2 つのコアは 200% などとなります。
CPU 使用率と対応するプロセス ID (pid) は、top コマンドで確認できます。上部のインターフェイスで、c (完全なコマンド ライン パラメーターを表示するには) を押し、(各コアの統計を表示するには) 1 を押します。 (推奨: Java チュートリアル )
この問題の最も一般的な可能性は次のとおりです:
1. ヒープ メモリ不足による頻繁なフル GC
が考えられます。 2 つの方法で解決します: 確認するコマンド
sudo jmap -heap pid ヒープ メモリの消費量を確認します
sudo jstat -gc pid 間隔カウント GC の状況を確認します。例: sudo jstat -gc 5746 3000 5 は、5746 プロセスの GC 状況を確認し、3000 ミリ秒ごとに印刷し、合計 5 回印刷することを意味します。 FGC/FGCT が大幅に増加すると、Full GC が非常に頻繁に発生します。
フォローアップ処理:
状況が緊急の場合は、すぐに Java アプリケーション プロセスを再起動する必要があります。緊急でない場合は、関連情報を取得して、ヒープ メモリが不足している原因を分析する必要があります。が消費されています。メモリ リークの問題が発生している可能性があります。1) sudo jmap -histo pid | head -n 20 を使用して Java オブジェクトの占有統計を表示できます。2) sudo jmap -dump:live,format=b,file= heap.bin pid を使用してヒープ ダンプをローカル ファイルにエクスポートすると、Eclipse MAT ツールを使用してメモリ リークを分析できます
2. コード実装の問題
アイデア: どのスレッドがメモリ リークを占有しているかを追跡するCPU、1) まず、ローカル システムで CPU 使用率が高いスレッド ID を見つけます。2) 対応する Java スレッドとスレッド スタック
top -H -p pid を見つけて、プロセス内のどのスレッドが CPU を占有しているかを確認します。 、対応するスレッド ID をコピーし、16 進数に変換します [IDEA] Tools》Groovy Console》println Long.toHexString(1234) で変換が完了します。
sudo jstack -l -F pid |less Java スレッド スタックを取得し、16 進数のローカル スレッド ID で検索すると、特定の行の nid で対応するスレッドが見つかります。 Java スレッド スタックをチェックして、対応する Java クラスと行番号を見つけ、コードを読んで問題の考えられる原因を見つけます。
jstack スタック情報の tid/nid の説明
https://docs.oracle.com/javas...
The thread dump consists of the thread stack, including the thread state, for all Java threads in the virtual machine. The header line contains the following information about the thread: - Thread ID (tid), which is the address of a thread structure in memory. - ID of the native thread (nid).
以上がJava プロセスの CPU 使用率が 100% になる場合のトラブルシューティング方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。