2

我在 CentOS 64 位 linux 机器上使用 jdk 1.7.0_09。

gc 相关的 vm args 是

-Xmx4g -Xmn2g -XX:SurvivorRatio=4 -XX:PermSize=128m -XX:MaxPermSize=128m -XX:InitialTenuringThreshold=15 -XX:CMSWaitDuration=50 -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+CMSParallelRemarkEnabled -XX:ReservedCodeCacheSize=128m

但它一直在做完整的 gc

jstat -gcutil pid 1000    
    S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
    0.00   0.00  15.62  57.52  19.90     11    2.081 11109 7454.686 7456.767   
    0.00   0.00  15.81  57.52  19.90     11    2.081 11109 7454.686 7456.767   
    0.00   0.00  15.81  57.51  19.90     11    2.081 11111 7454.892 7456.973   
    0.00   0.00  16.06  57.51  19.90     11    2.081 11111 7455.115 7457.196
    0.00   0.00  16.06  57.51  19.90     11    2.081 11111 7455.115 7457.196
    0.00   0.00  16.27  57.51  19.90     11    2.081 11111 7455.115 7457.196
    0.00   0.00  16.27  57.51  19.90     11    2.081 11111 7455.115 7457.196
    0.00   0.00  16.29  57.51  19.90     11    2.081 11111 7455.115 7457.196
    0.00   0.00  16.29  57.51  19.90     11    2.081 11111 7455.115 7457.196
    0.00   0.00  16.29  57.47  19.90     11    2.081 11113 7455.549 7457.629
    0.00   0.00  16.29  57.47  19.90     11    2.081 11113 7455.549 7457.629
    0.00   0.00  16.34  57.47  19.90     11    2.081 11113 7455.549 7457.629
    0.00   0.00  16.34  57.47  19.90     11    2.081 11113 7455.549 7457.629
    0.00   0.00  16.34  57.47  19.90     11    2.081 11113 7455.549 7457.629
    0.00   0.00  16.42  57.47  19.90     11    2.081 11114 7455.549 7457.629
    0.00   0.00  16.42  57.44  19.90     11    2.081 11115 7455.986 7458.067
4

2 回答 2

3

尽管有“FGC”列,但它并不是真正的完整 GC。CMS 正在做的是一个并发收集,以查看是否可以从旧收集中清除任何内容(您可以看到它正在执行的操作)。可以判断这不是完整 GC 的方法是,完整 GC 会清除伊甸园空间并从一个幸存者空间复制到另一个。

恕我直言,您使用的选项越多,您就越有可能遇到某些组合并产生令人惊讶的结果。我会坚持最少的选择,看看它的表现如何。仅当您知道它们将始终提供帮助时才添加选项。

尝试开始,

-mx4g -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC
于 2012-11-26T09:10:16.930 回答
0

这是正常的。如果您执行“-verbose:gc”,您可以看到“完整”集合实际上是一个并发集合(您指定了“-XX:+UseConcMarkSweepGC”)您还可以看到时间并没有增加太多。那个时间是并发的,而不是停止世界。

于 2012-11-26T09:11:07.717 回答