常见性能瓶颈调优总结之JVM1小时1次CMS FGC调优

上一篇 / 下一篇  2014-02-20 19:31:10 / 个人分类:性能测试

   2年前写的一篇总结文章,在过去做性能测试过程中经常看到1小时1次FGC问题,该问题在高并发情况下对性能产生很大的波动不可小看,也许一个小小的调优可以给性能带来很大的改善。

   应用出现1小时1次FGC,所引发的原因是由于使用了RMI,会自动1小时调用1次system.gc()。
大多数的应用虽然配置了CMS gc方式,但是如果没有使用-XX:+ExplicitGCInvokesConcurrent,则会出现显示调用system.gc(),且不会进行 CMS的FGC,带来的影响是造成tps的波动(fgc停机时间越长,则波动会越大)。

收集各方的意见后,总结针对此类问题的解决方法如下:

1、增加参数 -XX:+DisableExplicitGC

   该方法System.gc()的调用就会变成一个空调用。但是该方法不适用在大量使用NIO的direct memory,经常、反复的申请DirectByteBuffer的应用中使用,会造成“java.lang.OutOfMemoryError: Direct buffer memory ”。该方法需根据应用具体情况而定。

2、增加参数 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000

   其中3600000即为定时触发的时间间隔设置,单位是毫秒,可适当延长触发FGC的定时时间间隔。

   -Dsun.rmi.dgc.client.gcInterval=Long.MAX_VALUE     -Dsun.rmi.dgc.server.gcInterval=Long.MAX_VALUE 则将fc时间间隔设为long型的最大值

3、增加参数 -XX:+ExplicitGCInvokesConcurrent 或者-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
该方法可以指定System.gc()采用 CMS 算法,FGC时停机时间会变短,但是CMS GC次数不会变,仍然是1小时1次。

参考文献:


TAG: 性能测试 性能调优

51Testing小编的个人空间 引用 删除 zaza9084   /   2014-02-26 10:14:20
您好,我是51Testing软件测试网的编辑,您的本篇博文将被推荐至51Testing软件测试网首页发表~
感谢您关注并支持51Testing博客,期待您更多的优秀原创博文。
 

评分:0

我来说两句

日历

« 2024-05-03  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 15286
  • 日志数: 4
  • 建立时间: 2013-10-11
  • 更新时间: 2014-02-20

RSS订阅

Open Toolbar