問題タブ [jhat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
12 に答える
150871 参照

java - Java メモリ リークを見つける方法

Java でのメモリ リークをどのように見つけますか (JHat などを使用)。基本的な外観を得るために、JHat にヒープ ダンプをロードしようとしました。ただし、ルート参照 ( ref ) またはそれが呼び出されるものを見つける方法がわかりません。基本的に、数百メガバイトのハッシュ テーブル エントリ ([java.util.HashMap$Entry など) があることがわかりますが、マップはいたるところで使用されています...大きなマップを検索する方法はありますか? 、またはおそらく大きなオブジェクトツリーの一般的なルートを見つけますか?

[編集] わかりました、これまでの回答を読みましたが、私は安っぽい野郎だとだけ言っておきましょう (つまり、JProfiler にお金を払うよりも、JHat の使い方を学ぶことに関心があるということです)。また、JHat は JDK の一部であるため、いつでも使用できます。もちろん、JHat にはブルート フォース以外の方法はありませんが、そうであるとは信じられません。

また、実際に変更 (すべてのマップ サイズのログを追加) して、リークに気付くのに十分な時間実行できるとは思いません。

0 投票する
2 に答える
2409 参照

java - jhat の -baseline オプションが機能しないのはなぜですか?

2 番目のスナップショットにはあるがベースライン スナップショットには含まれていないオブジェクトだけではなく、すべてのオブジェクトが新規としてマークされているように見えるのはなぜですか? オンラインで調べてみると、jmap の代わりに hprof を使用してメモリ ダンプを作成する必要があるという提案がいくつか見られますが、hprof はまったく同じ形式でダンプを生成するようです。

これは JDK 1.6.0_14 です。Windows と UNIX の両方で試しました。

0 投票する
2 に答える
35182 参照

java - クラス クラス [B は Java で何を表しますか?

ここでツール jhat を試して、Java のメモリ使用量をテストしています。ヒープ ダンプ ファイルを読み取り、情報を html として出力します。ただし、表には次のように表示されます。

それらの [B [C などのクラスは何ですか?

0 投票する
2 に答える
2877 参照

java - ヒープダンプでのみ新しいオブジェクトを見つけるための OQL?

ヒープ出力でのみ新しいオブジェクトを見つけるための OQL 構文を知っている人はいますか? OQL オプションに関する適切なドキュメントが見つかりません。sun には、それを生成したクエリのサンプル構文のない、新規のみの出力の例さえあります。

  • jhat で一連のヒープを作成しました
  • 両方のヒープにないオブジェクトを「新規」としてマークするjmap -baselineでそれらを提供しました。
  • 閲覧する
  • スクラッチヘッド
0 投票する
4 に答える
27785 参照

java - 大きな hprof を jhat にロードする

オプションを使用して 64 ビット JVM によってダンプされた 6.5GB の Hprof ファイルがあり-XX:-HeapDumpOnOutOfMemoryErrorます。私はそれを 16GB 64 ビットのマシンに置いており、それを jhat に入れようとしていますが、メモリが不足し続けています。最小設定の jvm args を渡そうとしましたが、最小値を拒否し、最大値に達する前にメモリが不足しているようです。

メモリ不足の jvm があまりにも大きなヒープをダンプし、2 倍の RAM を搭載したボックスにロードできないというのは、ちょっとばかげているように思えます。これを実行する方法、または分析を償却する方法はありますか?

0 投票する
1 に答える
3615 参照

java - セッションから参照される特定のクラスのすべてのインスタンスとサブインスタンスを検索する OQL クエリ

jhat/OQL を使用して Tomcat コンテナのメモリ リークを追跡しようとしています。私が聞きたい質問は次のとおりです。

「javax.servlet.http.HttpSession から到達可能な foo.bar.Cacheable クラスのすべてのインスタンス (およびサブインスタンス) を表示してください」

私はなんとか次のことを思いつきましたが、これはfoo.bar.Cacheableのサブクラスを示していません(これは実際にはインターフェースであるため重要です)。

以下の概念のさまざまな順列を試しましたが、エラーが発生し続けます (「foo」は定義されていません)。

OQLを通じてこの質問を提起するために私が間違っていることを誰かが助けてくれますか?

0 投票する
3 に答える
6374 参照

java - jhat を使用してヒープ ダンプを分析する方法

ヒープ ダンプで jhat を実行したところ、レポートが生成されました。レポートを使用してヒープを分析するにはどうすればよいですか。インスタンス数以外は完全には理解できませんでした。それに関する参考文献やケーススタディはありますか。要するに、さらに先に進む必要があります。どうすればよいですか?

また、オブジェクトクエリ言語とは何ですか。

0 投票する
1 に答える
97 参照

memory-management - 本番環境に適用するための基本的なgc生成サイズと比率はありますか

若い世代の初期サイズはいくらですか?-XX:+ NewRatioはいくらですか?-XX:+ SurvivourRatio?パーマと旧世代の比率はどうあるべきですか。

0 投票する
3 に答える
1454 参照

java - ガベージコレクションされていないオブジェクトを特定するより良い方法は?

手短に

時間の経過とともにメモリを徐々に使用しているプログラムがあります。jmap と jhat を使用して診断しようとしていますが、まだ十分ではありません。

バックグラウンド

このプログラムは、他の多くのものにリサイクルサービスを提供する hbase データストアに支えられた長期稼働サーバーです。ただし、数日間実行した後、最終的には割り当てられたヒープの制限に達し、ほぼすべての時間をガベージ コレクションに費やして前後にスラッシングします。どこかで大量のデータへの参照が保持されているようです

これまでに行ったこと

jstatとjconsoleをいじった後、実行中のプロセスのjmapを使用してヒープダ​​ンプを取得し、jhatを介して実行しましたが、単純な数値はメモリ使用率の近くに加算されません

jmap -F -dump:live,format=b,file=heap.dump 12765

jmap -F -dump:format=b,file=heap.all 12765

ヒストグラムの上部にあるもの

ここでの合計は合計されませんが、ヒープ ダンプが取得された時点で、プロセスは 1 GB を超えるメモリを使用していました。

すぐに明らかな犯人は、HBase Result と KeyValue エントリをあちこちに残しているようです。参照を追跡しようとすると、最終的にヒットしました

助けが必要:

この最終的な HBaseCLient$Call オブジェクトへの参照はないようです (または、それぞれがすべての内部データを含む 1000 ほどのキー値を保持する、同様の他のオブジェクトのいずれか)。GCされるべきではありませんか?gc がどのように機能するか、または jhat が参照を検証する範囲を誤解しているだけですか? もしそうなら、「失われた」記憶を追跡するためにさらに何ができますか? これを追跡するために他にどのような手順を実行できますか?

0 投票する
2 に答える
2532 参照

java - JHATはメモリダンプを分析できません

メモリダンプファイルがあり、JHATから次のメッセージが表示され、何も分析できません(データが表示されないため)。

これは、hprofファイルが不完全または破損していることを意味しますか?


-XX:+HeapDumpOnOutOfMemoryError" Tomcatでオプションを使用しています。