ホームページ >Java >&#&チュートリアル >Java プロセスの CPU 使用率が 100% になる場合のトラブルシューティング方法

Java プロセスの CPU 使用率が 100% になる場合のトラブルシューティング方法

不言
不言転載
2019-03-19 09:25:095220ブラウズ

この記事の内容は、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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。