为什么小型GC如此频繁

时间:2012-09-05 08:44:00

标签: java garbage-collection jvm

这是我的JVM参数:

> /usr/local/java/bin/java -Xloggc:log/gc.log -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:PermSize=64m -XX:MaxPermSize=64m -Xss128K -server -Xmn1024m -Xms3027m -Xmx3027m -Dresin.home=/usr/local/resin

我使用Resin,up是Resin启动JVM参数,以下是我使用jstat -gcutil时的GC输出pid 1000 1000

   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   

  0.00   1.60  46.21  25.62  21.69  72639  941.082    31    0.275  941.357

  1.51   0.00  51.91  25.63  21.69  72640  941.093    31    0.275  941.368

  0.00   1.87  62.96  25.64  21.69  72641  941.104    31    0.275  941.379

  1.51   0.00  86.39  25.65  21.69  72642  941.114    31    0.275  941.389

  0.00   1.56  94.28  25.65  21.69  72643  941.126    31    0.275  941.401

  0.00   1.45   5.03  25.67  21.69  72645  941.146    31    0.275  941.421

  1.74   0.00  18.76  25.68  21.69  72646  941.158    31    0.275  941.433

  0.00   1.85  37.51  25.69  21.69  72647  941.169    31    0.275  941.443

  1.59   0.00  53.58  25.70  21.69  72648  941.180    31    0.275  941.455

  0.00   1.74  74.02  25.71  21.69  72649  941.192    31    0.275  941.467

我们可以找到每秒一次的次要GC,我觉得它非常频繁,因为我的新Edanz尺寸是1g。那么为什么如此频繁或者这是正常的事情?

1 个答案:

答案 0 :(得分:4)

要么你的伊甸园大小不是1 GB,要么你正在创造一个令人难以置信的垃圾。由于您似乎没有设置您的伊甸园大小,因此怀疑它比您想象的要小得多。

尝试使用jstat -gccause来查看尺寸。

我怀疑你一直在阅读http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp错误地指出-Xmn设置了伊甸园空间。 ;)

-Xmx选项设置最大总堆大小(年轻和旧)

-Xmn选项设定年轻一代的大小,包括伊甸园空间和两个幸存者空间。由于你的幸存者空间看起来不是很充实,我怀疑他们占据了年轻一代的大部分。

http://www.oracle.com/technetwork/java/javase/tech/exactoptions-jsp-141536.html

尝试将-XX:SurvivorRatio=设置为10,大部分1 GB将是Eden空间。

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html