4

这是我的 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,上面是Resin启动JVM参数,下面是我使用jstat -gcutil pid 1000 1000时的GC输出

   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

我们可以找到大约每秒一次的minor GC,我觉得它很频繁,因为我的新Edanz 大小是1g。为什么这么频繁或者这是正常的事情?

4

1 回答 1

5

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

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

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

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

-Xmn选项设置由伊甸园空间和两个幸存者空间组成的年轻代的大小。由于您的幸存者空间似乎不是很满,我怀疑它们占年轻一代 1 G 的大部分。

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

于 2012-09-05T08:47:35.577 回答