ibm jdk 1.5缺省用的gc策略性能很差
这几天测试一个引擎的性能,用一个单表查询的case,测试出来的结果是210tps,cpu也正常,在85%左右,也没怀疑。
后面再重新测试的时候,加上了gc log,用gc分析工具分析了一下gc的吞吐量,发现吞吐量奇低,竟然只有77%左右,很是奇怪,看了一下gc日志,所有都是global gc, 怀疑gc策略有问题,查了一下资料,参考了下面一篇文章:
http://www.ibm.com/developerworks/cn/java/j-ibmjava2/
缺省gc策略是针对吞吐量进行优化:-Xgcpolicy:optthruput
,对于吞吐量比短暂的 GC 停顿更重要的应用程序,通常使用这种策略。每当进行垃圾收集时,应用程序都会停顿。
我摘下面一段其他几个gc策略:
切换到其他 GC 策略的原因
切换到 原因
optavgpause
- 我的应用程序无法忍受那么长的 GC 停顿时间。如果 GC 停顿时间能够减少的话,性能降低一些也可以接受。
- 我的应用程序正在一个 64 位平台上运行并使用非常大的堆 —— 超过 3 或 4GB。
- 我的应用程序是一个 GUI 应用程序,我很关注用户响应时间。
gencon
- 我的应用程序分配了许多短期存活的对象。
- 堆空间出现碎片化。
- 我的应用程序是基于事务的(也就是说,在事务提交之后,事务中的对象就不再存活了)。
subpool
- 在大型多处理器计算机上,我遇到了可伸缩性问题。
试了一下gencon策略,hoho,好家伙,测试case的吞吐量竟然提升到290tps(直接提升40%),太夸张了,gc吞吐量也提升到了98%,记得以前1.4的时候没有分代的gc策略,而且印象中,ibm jdk不分代,估计是引入分代机制之后,缺省的optthruput策略变得复杂起来,不像以前那样效率高了。
这里也给大家提个醒,当心ibm jdk 1.5的gc策略,发现gc效率很低的时候切换到gencon,也许会有很大的惊喜!
posted on 2008-04-14 20:38 tacy lee 阅读(954) 评论(2) 编辑 收藏 所属分类: 性能相关
评论
请问使用什么工具来看gc吞吐量, 主要看哪个参数? 回复 更多评论
# re: ibm jdk 1.5缺省用的gc策略性能很差 2008-04-18 09:22 tacy lee
用日志查看工具http://www.alphaworks.ibm.com/tech/pmat 打开一个gc log文件,看里面的overall garbage collection overhead 回复 更多评论