問題タブ [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.
java - Java メモリ リークを見つける方法
Java でのメモリ リークをどのように見つけますか (JHat などを使用)。基本的な外観を得るために、JHat にヒープ ダンプをロードしようとしました。ただし、ルート参照 ( ref ) またはそれが呼び出されるものを見つける方法がわかりません。基本的に、数百メガバイトのハッシュ テーブル エントリ ([java.util.HashMap$Entry など) があることがわかりますが、マップはいたるところで使用されています...大きなマップを検索する方法はありますか? 、またはおそらく大きなオブジェクトツリーの一般的なルートを見つけますか?
[編集] わかりました、これまでの回答を読みましたが、私は安っぽい野郎だとだけ言っておきましょう (つまり、JProfiler にお金を払うよりも、JHat の使い方を学ぶことに関心があるということです)。また、JHat は JDK の一部であるため、いつでも使用できます。もちろん、JHat にはブルート フォース以外の方法はありませんが、そうであるとは信じられません。
また、実際に変更 (すべてのマップ サイズのログを追加) して、リークに気付くのに十分な時間実行できるとは思いません。
java - jhat の -baseline オプションが機能しないのはなぜですか?
2 番目のスナップショットにはあるがベースライン スナップショットには含まれていないオブジェクトだけではなく、すべてのオブジェクトが新規としてマークされているように見えるのはなぜですか? オンラインで調べてみると、jmap の代わりに hprof を使用してメモリ ダンプを作成する必要があるという提案がいくつか見られますが、hprof はまったく同じ形式でダンプを生成するようです。
これは JDK 1.6.0_14 です。Windows と UNIX の両方で試しました。
java - クラス クラス [B は Java で何を表しますか?
ここでツール jhat を試して、Java のメモリ使用量をテストしています。ヒープ ダンプ ファイルを読み取り、情報を html として出力します。ただし、表には次のように表示されます。
それらの [B [C などのクラスは何ですか?
java - ヒープダンプでのみ新しいオブジェクトを見つけるための OQL?
ヒープ出力でのみ新しいオブジェクトを見つけるための OQL 構文を知っている人はいますか? OQL オプションに関する適切なドキュメントが見つかりません。sun には、それを生成したクエリのサンプル構文のない、新規のみの出力の例さえあります。
- jhat で一連のヒープを作成しました
- 両方のヒープにないオブジェクトを「新規」としてマークするjmap -baselineでそれらを提供しました。
- 閲覧する
- スクラッチヘッド
java - 大きな hprof を jhat にロードする
オプションを使用して 64 ビット JVM によってダンプされた 6.5GB の Hprof ファイルがあり-XX:-HeapDumpOnOutOfMemoryError
ます。私はそれを 16GB 64 ビットのマシンに置いており、それを jhat に入れようとしていますが、メモリが不足し続けています。最小設定の jvm args を渡そうとしましたが、最小値を拒否し、最大値に達する前にメモリが不足しているようです。
メモリ不足の jvm があまりにも大きなヒープをダンプし、2 倍の RAM を搭載したボックスにロードできないというのは、ちょっとばかげているように思えます。これを実行する方法、または分析を償却する方法はありますか?
java - セッションから参照される特定のクラスのすべてのインスタンスとサブインスタンスを検索する OQL クエリ
jhat/OQL を使用して Tomcat コンテナのメモリ リークを追跡しようとしています。私が聞きたい質問は次のとおりです。
「javax.servlet.http.HttpSession から到達可能な foo.bar.Cacheable クラスのすべてのインスタンス (およびサブインスタンス) を表示してください」
私はなんとか次のことを思いつきましたが、これはfoo.bar.Cacheableのサブクラスを示していません(これは実際にはインターフェースであるため重要です)。
以下の概念のさまざまな順列を試しましたが、エラーが発生し続けます (「foo」は定義されていません)。
OQLを通じてこの質問を提起するために私が間違っていることを誰かが助けてくれますか?
java - jhat を使用してヒープ ダンプを分析する方法
ヒープ ダンプで jhat を実行したところ、レポートが生成されました。レポートを使用してヒープを分析するにはどうすればよいですか。インスタンス数以外は完全には理解できませんでした。それに関する参考文献やケーススタディはありますか。要するに、さらに先に進む必要があります。どうすればよいですか?
また、オブジェクトクエリ言語とは何ですか。
memory-management - 本番環境に適用するための基本的なgc生成サイズと比率はありますか
若い世代の初期サイズはいくらですか?-XX:+ NewRatioはいくらですか?-XX:+ SurvivourRatio?パーマと旧世代の比率はどうあるべきですか。
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 が参照を検証する範囲を誤解しているだけですか? もしそうなら、「失われた」記憶を追跡するためにさらに何ができますか? これを追跡するために他にどのような手順を実行できますか?
java - JHATはメモリダンプを分析できません
メモリダンプファイルがあり、JHATから次のメッセージが表示され、何も分析できません(データが表示されないため)。
これは、hprofファイルが不完全または破損していることを意味しますか?
-XX:+HeapDumpOnOutOfMemoryError"
Tomcatでオプションを使用しています。