最近、プロジェクトでこのような問題が発生しました。同じマイクロサービスを実行している5つの仮想マシンがあり、各マシンには8〜9個のサービスがマウントされており、そのうちの1つは理由を知らずにハングアップし、サービスではありません、マシンがハングし、シェルが接続できません。
最初の診断のアイデアでは、このマシンのサービスにメモリがバーストしているかどうかを考慮しているため、メモリの問題のトラブルシューティングを開始し、jdk独自のスクリプトを使用してメモリ診断分析を実行しました。
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