検索
ホームページJava&#&チュートリアルJavaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

ヒープダンプファイルの紹介

ヒープダンプ: ヒープダンプファイルは、特定の時点での JVM ヒープ内のオブジェクトの使用状況を保存するバイナリ ファイルです。 HeapDump ファイルは、指定された時点での Java スタックのスナップショットであり、イメージ ファイルの一種です。

ヒープ ダンプ (メモリ オーバーフロー) エラーは、通常、次の理由によって発生します。

1) JVM メモリが小さすぎる、

2) プログラムが厳密ではない、

3) ゴミが多すぎてリサイクルできない。

はじめに

前回の OOM 問題を確認した結果、今週、別の Java サービスでメモリの問題が発生しました。今回の問題は深刻ではありません。ヒープ メモリ使用量が多いというアラームがトリガーされるだけです。 OOM はトリガーされませんでしたが、幸いなことにダンプ スクリプトは前回のレビューで要約されており、ヒープ使用率が高い場合に自動的に jstack と jmap を実行するため、問題のサイトを正常に保持できます。

ヒープ使用量の分布を確認する

ヒープダンプ ファイルを発見した後、すぐにそれをローカル マシンにコピーし、MAT を使用して次のように分析しました。

明らかに、いくつかのインターフェイスが非常に大きな String オブジェクトを割り当てているようです。String オブジェクトは約 200MB です。では、どこに割り当てられているのでしょうか? Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

ラージ オブジェクト割り当てスレッドを見つける

この割り当て動作は特定のスレッドによって実行される必要があり、そのスレッドは最も一般的な GC ルートであるため、必要なのは、そのスレッドの GC ルートを見つけることだけです。

ラージ オブジェクトに対応する割り当てスレッドは、次のように http-nio-8088-exec-6 であることが判明しました: Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

スレッド スタックの表示Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

このスレッドが何を行っているかを確認するにはどうすればよいですか? MAT でしばらく探してみましたが、関連するコンテンツが見つかりませんでした。ダンプ スクリプトに jstack が記録されていることを思い出しました。それを開いて、次のように見てください。

このスレッドでは json シリアル化を行っていることがわかりますが、しばらく注意深く検索しましたが、関連するインターフェイスのコントローラーが見つかりませんでした。これは、スレッドがコントローラー内のロジックの実行を終了してから戻ったためです。インターフェイスがデータに応答するときに割り当てられるラージ オブジェクト。

ただし、スレッド スタックにビジネス コードが存在しない場合、どのインターフェイスに問題があるかを特定することはできません。 。 。

アクセスログ ログを確認するJavaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

ラージ オブジェクトを割り当てるインターフェイスは間違いなく非常に遅いと考え、次のように Tomcat のアクセスログ ログを確認してみました。

## 最後に、問題のインターフェイスを見つけました。このインターフェイスは、製品データのクエリに使用されます。3 を入力すると、3 で始まるすべての製品がクエリされ、データは 200,000 個あります。問題は非常に単純です制限を追加するだけで完了です。

トラブルシューティングのプロセスを振り返る

しかし、私にはいつも習慣があります。それは、問題を解決した後、問題解決のプロセスにどれだけ運が関わっていたかを振り返ることです。

トラブルシューティングに関する技術記事をよく読むと、あるステップで突然問題の根本原因が特定される記事がたくさんあります。コードを見て、どこかに問題があると推測するか、このトラブルシューティングのプロセスにはかなりの運が関係していると思いますが、長年にわたる理論的基礎の蓄積と診断ツールの熟練した使用によって、問題が少しずつ発見されることを願っています。

Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法今回の問題は、メモリの問題が極端ではないため、ある程度の運があれば、アクセスログから特定できます。このインターフェイスのリクエスト量が多い場合、複数の FGC が瞬時にトリガーされます。他のインターフェイスに影響を与えるだけでなく、速度も低下するため、どのインターフェイスが問題の原因であるかを判断できなくなります。

理論的には、Java ヒープ ファイルにはスレッド スタックとそのスレッド スタック上のパラメータが存在するはずだと思います。スレッドはオブジェクトでパラメータもオブジェクトであるため、それらはすべてヒープ内にあるはずです。空き時間に、MAT ツールを再び探索し始めました。

MAT View Thread Stack

しばらく模索した結果、次のようなスレッド情報を表示するボタンを見つけました。

Find前述のスレッド http-nio-8088-exec-6 を展開すると、次のようにスレッド スタックとスタック上のパラメータが見つかります。リクエストの Request パラメータ オブジェクトを取得し、Request オブジェクトを複数回展開すると、次のようにインターフェイス URL 情報を見つけることができます。

VisualVM View Thread Stack

多くの学生が VisualVM を使用してヒープダ​​ンプを分析することに慣れていることを考慮して、ここでは VisualVM の使用方法に関するチュートリアルも提供します。 Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

まず、次のようにヒープダンプ ファイルをロードします。

Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

次に、次のように、対応するオブジェクトを選択し、右クリックして [スレッドで選択] を選択します。

Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

スレッド スタックを見つけた後、表示したいオブジェクトを見つけます。 Request オブジェクトをクリックして次のように入力します。

Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

同様に、Request オブジェクトを展開すると、次のように URL 情報を見つけることができます。 :

Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

以上がJavaがヒープダンプファイルを取得した後にそれを迅速に分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
JVMはオペレーティングシステムAPIの違いをどのように処理しますか?JVMはオペレーティングシステムAPIの違いをどのように処理しますか?Apr 27, 2025 am 12:18 AM

JVMは、JavanativeInterface(JNI)およびJava Standard Libraryを介してオペレーティングシステムのAPIの違いを処理します。1。JNIでは、Javaコードがローカルコードを呼び出し、オペレーティングシステムAPIと直接対話できます。 2. Java Standard Libraryは統一されたAPIを提供します。これは、異なるオペレーティングシステムAPIに内部的にマッピングされ、コードがプラットフォーム間で実行されるようにします。

Java 9で導入されたモジュール性は、プラットフォームの独立性にどのように影響しますか?Java 9で導入されたモジュール性は、プラットフォームの独立性にどのように影響しますか?Apr 27, 2025 am 12:15 AM

modularitydoesnotdirectlyectlyectjava'splatformindepensence.java'splatformendepenceismaindainededainededainededaindainedaindained bythejvm、butmodularityinfluencesApplucationStructure andmanagement、間接的なインパクチャプラット形成依存性.1)

ByteCodeとは何ですか?また、Javaのプラットフォームの独立性とどのように関係していますか?ByteCodeとは何ですか?また、Javaのプラットフォームの独立性とどのように関係していますか?Apr 27, 2025 am 12:06 AM

bytecodeinjavaisthe intermediaterepresentationthateNablesplatformindepence.1)javacodeis compiledintobytecodestoredin.classfiles.2)thejvminterpretsorcompilesthisbytecodeintomachinecodeatime、

Javaがプラットフォームに依存しない言語と見なされるのはなぜですか?Javaがプラットフォームに依存しない言語と見なされるのはなぜですか?Apr 27, 2025 am 12:03 AM

javaachievesplatformedenceTheTheTheJavavirtualMachine(JVM)、これは、javacodeisisisisisissompiledIntobytecode.2)javaCodeisisisisissompiledevedevicetecode.2)

グラフィカルユーザーインターフェイス(GUI)は、Javaのプラットフォーム独立性の課題をどのように提示できますか?グラフィカルユーザーインターフェイス(GUI)は、Javaのプラットフォーム独立性の課題をどのように提示できますか?Apr 27, 2025 am 12:02 AM

Javagui開発におけるプラットフォームの独立性は課題に直面していますが、Swing、Javafx、統一外観、パフォーマンス最適化、サードパーティライブラリ、クロスプラットフォームテストを使用することで対処できます。 Javaguiの開発は、クロスプラットフォームの一貫性を提供することを目的としたAWTとSwingに依存していますが、実際の効果はオペレーティングシステムごとに異なります。ソリューションには以下が含まれます。1)SwingおよびJavafxをGUIツールキットとして使用します。 2)uimanager.setlookandfeel()を介して外観を統合します。 3)さまざまなプラットフォームに合わせてパフォーマンスを最適化します。 4)ApachepivotやSWTなどのサードパーティライブラリを使用する。 5)一貫性を確保するために、クロスプラットフォームテストを実施します。

Java開発のどの側面がプラットフォームに依存していますか?Java開発のどの側面がプラットフォームに依存していますか?Apr 26, 2025 am 12:19 AM

javadevelopmentisnotentirelylylypratform-IndopentDuetoseveralfactors.1)jvmvariationsaffectperformanceandbehavioracrossdifferentos.2)nativeLibrariesviajniintroducePlatform-specificissues.3)giaiasystemsdifferbeTioneplateplatifflics.4)

さまざまなプラットフォームでJavaコードを実行するときにパフォーマンスの違いはありますか?なぜ?さまざまなプラットフォームでJavaコードを実行するときにパフォーマンスの違いはありますか?なぜ?Apr 26, 2025 am 12:15 AM

Javaコードは、さまざまなプラットフォームで実行するときにパフォーマンスの違いがあります。 1)JVMの実装と最適化戦略は、OracleJDKやOpenJDKなどとは異なります。 2)メモリ管理やスレッドスケジューリングなどのオペレーティングシステムの特性もパフォーマンスに影響します。 3)適切なJVMを選択し、JVMパラメーターとコード最適化を調整することにより、パフォーマンスを改善できます。

Javaのプラットフォームの独立性の制限は何ですか?Javaのプラットフォームの独立性の制限は何ですか?Apr 26, 2025 am 12:10 AM

java'splatformindepentedencehaslimitationsincludingporformanceoverhead、versioncompatibulisisues、changleSwithnativeLibraryIntegration、プラットフォーム固有の機能、およびjvminStallation/maintenation。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター