6

プロファイリングしているNetbeansのプロジェクトがあります(Java 7を使用)。私が探しているのは、ガベージ コレクションで、Eden スペースから Survivor スペースに移動するメモリの量と、Tenured スペースにオーバーフローするメモリがあるかどうかです。その上で、Tenured スペースが時間の経過とともにどのように拡大しているかを探しています。

GC 統計を出力しますが、次のような情報しか得られません。

2339.967: [GC 2339.967: [ParNew: 66213K->4522K(69376K), 0.0161101 secs] 284589K->223320K(369484K), 0.0161685 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
2344.543: [GC 2344.543: [ParNew: 66218K->4520K(69376K), 0.0161084 secs] 285016K->223739K(369484K), 0.0161647 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
2349.118: [GC 2349.118: [ParNew: 66216K->4519K(69376K), 0.0159046 secs] 285435K->224159K(369484K), 0.0159587 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 

私が探している情報を把握する方法を知っている人はいますか?

ありがとう!

4

4 に答える 4

12

以下に、便利な GC フラグをいくつか示します。

-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps
-XX:+PrintClassHistogram
-XX:+PrintTenuringDistribution
-XX:+PrintGCApplicationStoppedTime

-XX:+PrintTenuringDistribution は、探しているものを提供するはずです。

于 2013-09-25T18:36:48.413 に答える
6

Oracle の JDKjvisualvmには、無料のプロファイラーが標準装備されています。メモリ、CPU、スレッド、ネットワーク時間、データベースアクセスなどを消費しているものを表示します。はい、GC 時間や、一般的な GC に関するその他の利点も表示します。

最良の部分は、無料です! (また、Oracle JDK を使用している場合は、システムに既にインストールされている可能性があります)

http://www.youtube.com/watch?v=dUQqmnmCBbg

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html

于 2013-09-25T18:38:06.637 に答える
6

簡単な解決策はを使用することjstatです。これは、すべての世代にわたるすべての異なるメモリ領域 (Eden、Survivor スペース) の占有を示します。

使用例 jstat -gcutil -t <pid> <interval> <number_of_samples>

出力例:

jstat -gcutil 21891 250 7
  S0     S1     E      O      P     YGC    YGCT    FGC    FGCT     GCT
 12.44   0.00  27.20   9.49  96.70    78    0.176     5    0.495    0.672
 12.44   0.00  62.16   9.49  96.70    78    0.176     5    0.495    0.672
 12.44   0.00  83.97   9.49  96.70    78    0.176     5    0.495    0.672
  0.00   7.74   0.00   9.51  96.70    79    0.177     5    0.495    0.673
  0.00   7.74  23.37   9.51  96.70    79    0.177     5    0.495    0.673
  0.00   7.74  43.82   9.51  96.70    79    0.177     5    0.495    0.673
  0.00   7.74  58.11   9.51  96.71    79    0.177     5    0.495    0.673

説明:

この例の出力は、3 番目と 4 番目のサンプルの間で若い世代のコレクションが発生したことを示しています。コレクションには 0.001 秒かかり、オブジェクトを eden スペース (E) から古いスペース (O) に昇格させた結果、古いスペースの使用率が 9.49% から 9.51% に増加しました。収集前の Survivor 領域の使用率は 12.44% でしたが、この収集後は 7.74% しか使用されていません。

より重量のあるオプションはプロファイラーです。たとえば、GC モニタリングを備えた JVisualVM や、Java 7u40 を備えた新しい Java Mission Control です。

また、次の GC オプションも考慮して-XX:+PrintTenuringDistributionください-XX:MaxTenuringThreshold

于 2013-09-25T18:36:06.487 に答える
1

フラグを使用して、-XX:+PrintGCDetails詳細を印刷できるようにします。

于 2013-09-25T18:28:49.097 に答える