6

hprofVisualVM でファイルを調査しています

サーバーは JDK 1.4.2_30 を実行しており、NewSize が 200 Mb の 1 GB ヒープがあります。

hprof は、ヒープの 71% が の 56000 インスタンスによって占められていることを示してint[]おり、VisualVM で表示すると、これらの 56K 配列のどれも参照を持っていません。

私たちによると、「参照がない」場合、これはガベージコレクションされているはずです。質問は次のとおりです。

a)これらの参照を見つける方法はありますか?

b) これは不適切なスナップショットですか? つまり、ヒープ ダンプを取得するアクションで何らかの GC が実行されましたか?

c) VisualVM の「保持サイズ」オブジェクトを確認する必要がありますか?

更新情報として- これらが何であるかはまだわかりませんint[]が、次に大きなオブジェクトはプール内の Weblogic 内部 EJB 参照であり、以前の頻繁なフル GC からメモリ使用率を 30% に低下させた不適切な設定を発見しました。

4

1 に答える 1

2

免責事項:先の当て推量、明確な答えはありませんが、いくつかの有用なヒントを与えることができるかもしれません。

私は最近同様の状況を見てきました(ただし、はるかに新しいJavaバージョンを使用しています)。

参照されていないバッファが多数ある理由は、ある種のマップされたバッファにあるint[] ようです(私は、NIOの専門家ではありませんが、これに関連しているようです)。

この結論の理由は、メモリ内にほぼ同じサイズの非常に類似した数があり、それらがいくつかのインスタンスによって参照されていたためです。byte[]byte[]*Channel

したがって、私の推測では、これらint[]は実際に(適切に参照されている)とメモリを共有する合成インスタンスであると推測されます。要するに:彼らは赤いニシンです。byte[]

当時の実際の問題はまったく関係のないものであることが判明したため、これはすべて当て推量であり、フォローアップすることはありませんでした。

于 2011-09-05T07:07:42.957 に答える