問題タブ [jmap]
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 - 「jmap -permstat」からの出力を解釈する方法は?
私は permgen リークのトラブルシューティングを試みており、jmap -permstat からの出力を解釈する方法について意見を求めたいと思っています。
次のような jmap -permstat レポートがあるとします。
上記の出力をどのように解釈するかを次に示します。その際に犯した間違いを修正してください。
「タイプ」列の値は一意ではありません。3 回出現するオブジェクトがいくつかあります。ただし、class_loader の値は 3 つすべてで一意です。したがって、それらのそれぞれは個別のオブジェクトであり、permgen スペースを占有します。この例では、それぞれが 100 バイトを占めています。したがって、300 バイトの permgen スペースが、タイプ SomeClassLoader のオブジェクトによって占有されています。
クラスの値がゼロ以外の場合、このオブジェクトは何らかのクラス ローダーである必要があり、これは参照するクラスの数を示します。(注: 実際のファイルでは、これら 3 つのオブジェクトのバイト列にゼロが含まれています。この例では値を追加しました。実際には、クラス列に 0 がある場合、バイト値はゼロ以外の値にすることができます。)
alive 値が「dead」の場合、オブジェクトはガベージ コレクションの準備ができているが、JVM はそうしていないことを意味します。これが当てはまる理由については、別の議論が必要です。
parent_loader 列に値がある場合、これは別のクラス・ローダーによって参照されているオブジェクトであり、そのオブジェクトがガベージ・コレクションされるまでガベージ・コレクションできません。
最後に: 1) レポートに 500 行が表示され、すべて同じタイプがリストされている場合、2) それらに異なる class_loader 値がリストされている場合、3) バイト列の値を合計することができます。 permgen スペースは、そのタイプのオブジェクトによって占有されています。
これは正しいです?ありがとう!
java - GC がオブジェクトを収集しないのはなぜですか?
java.util.zip
データを圧縮/解凍するために呼び出し続けるJavaプログラムがあります。数秒以内にメモリが不足します。でメモリ ダンプを取得しjmap
、 で表示していjhat
ます。
ファイナライザの概要が表示されますTotal instances pending finalization: 0
。私が正しく理解していれば、(1) finalize() メソッドを持っている、(2) GC によってマークされている、(3) ファイナライズを待っているオブジェクトはありません。これは良さそうです。
特定のオブジェクトを見ると、このオブジェクトへの唯一の参照はjava.lang.ref.Finalizer
. Finalizer オブジェクトは、オブジェクトが GC されているかどうかに関係なく、finalize() メソッドを持つ各オブジェクトに対して作成されます。したがって、このDeflater
オブジェクトが GC されることを妨げているものは何もないように見えます。
0x7f4aeb7a35d0 のオブジェクト
java.util.zip.Deflater@0x7f4aeb7a35d0 のインスタンス (51 バイト)
このオブジェクトへの参照:
java.lang.ref.Finalizer@0x7f4aeb8607c8 (64 バイト) : フィールド参照先
プログラムは によって実行中に一時停止されSystem.in.read()
ます。しばらくメモリ使用量が減りません。
アップデート:
私はそれを明確にする必要があります。メモリ ダンプは、多くのオブジェクトが GC されていないことを示していますが、他のオブジェクト (ファイナライザー オブジェクトを除く) はそれらを参照していませんでした。GC されなかった理由を突き止めようとしています。
java - コアダンプを hprof に変換できません
hprof に変換したい core.31690 ファイルがあります。私は試しました:jmap -dump:format=b,file=mydump.hprof /usr/bin/java core.31690
しかし、私は以下を得ました:
オンラインで探してみましたが、何も見つかりませんでした。ポインタはありますか?
java - JMapFrame と GUI [Java]
わかりました、皆さん、こんにちは。まず、私が持っているものをお見せします:
私はこのコードを持っています:
ええと、私の目標はそのようなもので、同じ組織です:
しかし、どうすればいいのかわかりません。私にとっては少し混乱しています。問題はレイヤーです。マップの左側に配置できません...より良い方法で配置するのを手伝っていただければ幸いです私のコード。
java - JMAP ダンプのサイズは 4.5 GB です。Eclipse MAT は 415 MB の合計ヒープを示しています。残りのダンプを分析するにはどうすればよいですか?
Tomcat 6 を使用して Web アプリケーションを実行しています。オープン JDK 6 を使用しています。AMD 64 ビット Ubuntu 11.04 サーバーです。
このコマンドでメモリダンプを採取します
メモリ ダンプは 4.5 GB です。Eclipse MAT を使用して分析したところ、強力な到達可能オブジェクトは 80 MB、到達不能オブジェクトは 335 MB でした.残りのダンプを分析する方法..
また、このプロセスによってサーバーで使用されるメモリは 4.5 GB です。現在、このメモリは通常の 1 GB レベルまで低下することはありません。そして、このメモリはゆっくりと 8 ~ 9 GB に増加し、Tomcat は応答を停止します (実際には、メモリ不足エラーは発生しません)。
私のTomcat設定は
java - blazesds が大量のメモリを消費する
Flex4.6 との通信には BlazeDS 4 が使用されます。Flex クライアントが blazed サーバーでリモート呼び出しを呼び出すと、サーバーは POJO を含む arrayList を返します。各 POJO mem サイズが 12 バイトであると仮定すると、arrayList のサイズは 12*要素数になると予想されます。ただし、ブレーズドのどこかで、複数回複合されていることがわかります。配列リストに 200000 個の POJO を追加すると仮定すると、そのサイズは ~2MB になると予想されます。しかし、プロファイラーを通して、JVM が元のサイズの N 倍になり、同じ N 倍のメモリがフレックス ブラウザー アプリケーションにも転送されていることがわかりました。以下にリストされているのは、jmap プロファイラー キャプチャを使用した問題を示すサンプル コードです。必要に応じて、フレックス コードも提供させていただきます。
また、SampleClass クラスの定義は次のとおりです。
メモリは、jdk パスに存在する jmap.exe でプロファイルされます。クライアントからのリクエストを受け取る前の JVM の詳細メモリは、約 50MB でした。クライアントからのリクエスト前の jmap からの出力。
num #instances #bytes クラス名
1 63135 8497488 constMethodKlass
2 65671 7858440 [C
3 91344 5217976 symbolKlass
.
.
合計 658429 50097416 //JVM の初期メモリ
リクエストを処理した後の jmap からの出力。
num #instances #bytes クラス名
1 11402 20225512 [B
2 200000 1948809 SampleClass //予想どおり ~2MB
3 62734 8451040 constMethodKlass
.
.
合計 1175132 93938272 //ガベージ コレクションされていない JVM で消費されたメモリ。
奇妙なことに、Flex から同じメソッドを繰り返し呼び出そうとしても、それに応じて JVM メモリが増加しません。JVM で見られる数倍の増加は初めてです。ただし、フレックス クライアント アプリケーションのメモリは、呼び出しごとに増加し続けます。
YourKit プロファイラーで同じことを実行してみて、GC を何度も呼び出してみましたが無駄でした。
ブレイズド内で何が起こっているのか、誰かが私に理解させてくれませんか。
java - 古い世代のオブジェクトの統計?
さまざまな世代のJVMヒープのオブジェクト統計を表示するツールはありますか?私は潜在的なメモリリークを調査しており、さまざまな世代のデータが必要です。私が持っているユースケースは、古い世代のオブジェクトのスナップショットを取り、待機してから、別のスナップショットを取り、比較することです。
JVisualVMは、作成されたオブジェクトに関する統計を提供しますが、特定のオブジェクトが本来よりも速く昇格または保有されているかどうかがわからないため、あまり役に立ちません。
Jmapは、さまざまな世代の統計を提供しますが、オブジェクトベースでは提供しません。そのツールでは、古い世代が成長していることがわかります...
java - jmapに表示される「FromSpace」と「ToSpace」の意味は何ですか?
新世代/旧世代/パーマ世代の違いはわかりますが、「宇宙へ」と「宇宙から」が何なのかわかりません。「FromSpace」が99.8%使用されているのに対し、「ToSpace」は常に0%使用されているようです。
java - Javaでjmapを使用してヒープダンプを分析する方法
以下のコマンドを使用してヒープダンプを作成しています。
生成されたファイルを開きましたがDumpFile.txt
、読み取り可能な形式ではありません。生成されたファイルのデータを分析する方法を教えてください。
java - 古い世代の消費では Java メモリ リークが常に発生しますか?
「メモリリーク」と言われたものをデバッグしてきましたが、悪いビルドと良いビルドの古い世代グラフを比較すると、ほとんど同じに見えます。これをメモリリークではないと呼ぶのは安全ですか、それとも他に何か欠けている可能性がありますか?