官方JRockit JVM调优文档
转自BEA,原文链接已经无法访问,文中的许多链接也更改过地址,我把能找到的都重新做了连接。以前一直以为Jrockit和Sun的JVM配置差不多,看了这篇文章和最后参考资料中的信息,发现区别不是一点点,很多常用参数的使用都不一样。Jrockit的自动化设置应该说做的不错,在WebLogic上我很少更改它的默认配置(除了堆最大最小值),不过不影响这篇文章存在的价值。
摘要
本文的目的是以清单的方式提供BEA JRockit JVM的调优信息。从深奥的命令行选项到迭代性能测试,本文涵盖了许多方面。大部分数据都是我与用户合作过程中收集的。您要是也有什么技巧的话,请告诉我,在本文的下一版中,我会尝试将它们添加进去。
具体的产品版本信息都已在适当的地方列出;但是,本文所提供的通用指南适用于JRockit的大多数版本。每个版本的JRockit都增加了新的设置和优化,所以请查看 发行说明 和 JRockit产品中心。
验证当前的JRockit环境
首先需要确定您的运行时应用程序服务器所使用的JRockit的版本。为此,可以查看相应应用程序服务器的日志文件。也可以使用适当的脚本设置系统环境,然后执行java –version命令来确定JRockit的版本。
接着,收集当前JVM标志,开发和/或生产阶段需要用到它们:
-server -Xms1024m -Xmx1536m -Xverboselog:gc.log -Xverbose:memory-Xgcprio:throughput
这将告诉您当前JRockit实例的配置情况。
确定应用程序的目标
确定应用程序的目标是什么。是“响应快”还是“性能高”?根据目标的不同,需要设置不同的垃圾收集算法。
例如,如果应用程序的目标是实现高性能,则确保设置了Dynamic Garbage Collector "-Xgcprio:throughput" 选项。如果目标是响应时间短,那么需要将-Xgcprio:pausetime -Xpausetarget=XXX’中的pausetarget设置为最佳值。有关更多细节,请查看JRockit 调优文档。
收集故障诊断数据
如果JVM性能有问题,那么最好是先收集一些分析数据。该工作可以由团队中有相关经验的人员来完成,您也可以将这些信息发送给BEA Support做进一步分析。
首先,出现问题时需要收集大约10分钟的运行时JRockit Recording(JRA)数据。可以使用jrcmd.sh实用工具或JRockit Mission Control(JRMC)完成此操作。请阅读“性能测试期间的JRCMD/JRA”和“JRockit Mission Control”两节的内容。有关详细信息,请参阅 JRockit Mission Control文档。Latency Analysis一节提供许多有价值的内容,我们可以从中了解任何潜在的延迟问题(在JRockit中需要一个许可证就可以使用它)。
然后,需要收集问题发生时的一些详细日志。方法是在启动服务器实例的时候在JVM命令行输入以下参数:
-Xverboselog:perTestGC.log-Xverbose:opt,memory,gcpause,memdbg,compaction,gc,license-Xverbosetimestamp -Xgcreport
这样会将有价值的分析数据收集到刚才配置的perTestGC.log文件中。团队成员和/或BEA Support可以对这些数据进行分析。
最后一点:通常,应用程序不会请求执行垃圾收集(也就是在应用程序代码中调用System.gc())。但如果您怀疑它有问题,那么可以在启动服务器实例的时候,在Java命令行使用-XXnoSystemGC参数来禁用它。
现在,我将介绍如何通过迭代性能测试方法解决这些问题。


最及时的声音