【Java垃圾收集调优实战】

Parallel收集高达1秒的暂停时间基本不可忍受,所以选择CMS收集器。

  在被压测的Mule 2.0应用里,每秒都有大约400M的海量短命对象产生:

  1.因为默认60M的新生代太小了,频繁发生minor gc,大约0.2秒就进行一次。

  2.因为CMS收集器中MaxTenuringThreshold(生代对象撑过过多少次minor gc才进入win7主题下载年老代的设置)默认0,存活的临时对象不经过Survivor区直接进入年老代,不久就占满年老代发生full gc。

  对这两个参数的调优,既要改善上面两种情况,又要避免新生代过大,复制次数过多造成minor gc的暂停时间过长。

  1.使用-Xmn调到1/3 总内存。观察后设置Win7系统之家-Xmn500M,新生代实际约460m。(用-XX:NewRatio设置无效,只能用 -Xmn)。

  2.添加-XX:+PrintTenuringDistribution 参数观察各个Age的对象总大小,观察后设置-XX:MaxTenuringThreshold=5。

  优化后,大约1.1秒才发生一次minor gc,且速度依然保持在15-20ms之间。同时年老代的增长速度大大减缓,很久才发生一次full gc,

  参数定稿:

  -server -Xms1024m -Xmx1024m -Xmn500m -XX:+UseConcMarkSweepGC

  -XX:MaxTenuringThreshold=5

  -XX:+ExplicitGCInvokesConcurrent 最后服务处理速度从1180 tps 上升到1380 tps,调整两个参数提升17%的性能还是笔很划算的买卖。

  另外,JDK6 Update 7自带了一个VisualVM工具,内里就是之前也有用过的Netbean Profiler,类似JConsole一样使用,可以看到线程状态,内存中对象以及方法的CPU时间等调优重要参考依据。免费捆绑啊,Sun 这样搞法,其他做Profiler的公司要关门了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值