目次
ヒープダンプファイルの紹介
はじめに
ヒープ使用量の分布を確認する
このスレッドでは json シリアル化を行っていることがわかりますが、しばらく注意深く検索しましたが、関連するインターフェイスのコントローラーが見つかりませんでした。これは、スレッドがコントローラー内のロジックの実行を終了してから戻ったためです。インターフェイスがデータに応答するときに割り当てられるラージ オブジェクト。
MAT View Thread Stack
ホームページ Java &#&チュートリアル Javaがヒープダンプファイルを取得した後にそれを迅速に分析する方法

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

May 13, 2023 pm 08:58 PM
java heapdump

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

ヒープダンプ: ヒープダンプファイルは、特定の時点での 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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles