Java垃圾收集监控

时间:2013-09-25 18:27:01

标签: java garbage-collection

我在Netbeans中有一个项目,我正在分析(使用Java 7)。我正在寻找的是,在垃圾收集时,来自伊甸园空间的内存将进入幸存者空间,以及是否有任何内存溢出到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 个答案:

答案 0 :(得分:10)

以下是一些有用的GC标记:

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

-XX:+ PrintTenuringDistribution应该可以为您提供所需内容。

答案 1 :(得分:6)

Oracle的JDK现在标配jvisualvm,这是一个免费的分析器。它会告诉你什么在消耗内存,CPU,线程,网络时间,数据库访问等等。是的,它甚至可以显示GC时间和一些关于GC的其他好东西。

最好的部分,它是免费的! (如果您有Oracle JDK,它可能已经安装在您的系统上)

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

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

答案 2 :(得分:5)

简单解决方案是使用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秒,并将物体从伊甸园空间(E)提升到旧空间(O),从而使旧空间利用率从9.49%增加到9.51%。在收集之前,幸存者空间利用率为12.44%,但在此收集后,其利用率仅为7.74%。

更多重量级选项是分析器,例如带有GC监控的JVisualVM,或带有Java 7u40的新Java Mission Control。

另外,请考虑以下GC选项:-XX:+PrintTenuringDistribution-XX:MaxTenuringThreshold

答案 3 :(得分:1)

使用-XX:+PrintGCDetails标志可以打印更多详细信息。