JVMメモリーの問題のトラブルシューティング

最近、プロジェクトでこのような問題が発生しました。同じマイクロサービスを実行している5つの仮想マシンがあり、各マシンには8〜9個のサービスがマウントされており、そのうちの1つは理由を知らずにハングアップし、サービスではありません、マシンがハングし、シェルが接続できません。
最初の診断のアイデアでは、このマシンのサービスにメモリがバーストしているかどうかを考慮しているため、メモリの問題のトラブルシューティングを開始し、jdk独自のスクリプトを使用してメモリ診断分析を実行しました。
123test
1.すべてのJavaアプリケーションが占有するプロセスを表示する(Linuxで一般的に使用されるps -ef | grep java)

jps -l

ここに画像の説明を挿入

2.主に完全なgcがあるかどうかを確認するために、ガベージコレクションのプロセス、メモリ使用量を監視する必要性を確認します

jstat -gcutil 20954 1000

ここに画像の説明を挿入

3.対応するメモリのマップの存続を確認するここでは、対応するJavaプロセスに大きなオブジェクトがあるかどうかを主に確認します。大きなオブジェクトがある場合は、メモリが占​​有され、解放されていないことを意味します。

jmap -histo:live 20954 | head -10

ここに画像の説明を挿入
4.ダンプファイルのスナップショットを生成し、heap.hprofをエクスポートして生成し、メモリ診断ツールMemoryAnalyzerを使用してダンプファイルをインポートし、分析がOOMである場所を確認して、特定のコードを特定します。

jmap -dump:live,format=b,file=heap.hprof 20954 

ここに画像の説明を挿入

PS:Javaに対応するプロセスを見つけた後、メモリ例外を占有しているスレッドを見つけることもできます。また、このメソッドに従ってそれをチェックすることもできます。
最初に、pslistコマンドツールをWindowsにインストールする必要があります。
最初のステップ:https : //technet.microsoft.com/zh-cn/sysinternals/dd443648 ツール圧縮パッケージを入力して
2番目のステップをダウンロードします。解凍後、pslist.exeをC:\ Windowsにコピーします。 \ System32ディレクトリの下の
第三段階:pslistを入力するにはDOSウィンドウ、プロンプトウィンドウがプロンプトポップアップ表示されますインストールは、すべてのプロセスのリストが含まれます直後、同意してインストールします

。1.レビューにスレッドを対応する処理を

pslist -dmx 20954 

2.次に、エクスポートされたスレッドのスタックファイルを分析します

jstatck 10238 > 1.statck
オリジナルの記事を5件公開 Like1 Visits 99

おすすめ

転載: blog.csdn.net/iYhuitune/article/details/105339878