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

在过去做性能测试过程中经常看到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次。
版权声明:本文出自 希君 的51Testing软件测试博客:http://www.51testing.com/?367410
原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。
最新内容请见作者的GitHub页:http://qaseven.github.io/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值