JVM高级性能调试

标准的JVM是配置为了高吞吐量,吞吐量是为了科学计算和后台运行使用,而互联网商业应用,更多是为追求更短的响应时间,更低的延迟Latency(说白了就是更快速度),文章延迟到处存在,它会降低你的销售,用户打开网页没有快速响应,调马走人,亚马逊发现每100毫秒的延迟会损失1%的销售量。

而垃圾回收机制一旦启动就引发系统暂停,导致用户请求后的响应时间延长,通常的JVM配置参数如下:


-Xms2g -Xmx2g -Xmn150m
-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=10
-XX:CMSIncrementalDutyCycle=50 -XX:ParallelGCThreads=8
-XX:+UseParNewGC -XX:MaxGCPauseMillis=2000
-XX:GCTimeRatio=10 -XX:+DisableExplicitGC

作者发现使用-XX:+UseConcMarkSweepGC有性能上百分之40的降低,而网络上各种JVM调试都推荐此配置。

使用下面配置,比UseConcMarkSweepGC 有百分之20的性能提升,且暂停时间在100微秒以下(10K 100线程)


-Xms2g -Xmx2g -Xmn150m
-XX:GCTimeRatio=2 -XX:ParallelGCThreads=8
-XX:+UseParNewGC -XX:MaxGCPauseMillis=2000
-XX:+DisableExplicitGC

垃圾回收机制
Advanced JVM Tuning for Low Pause | mindstorms


辅助作者观点的另外一篇实战案例JVM配置也是如上,该案例中几乎使用了Oracle的内存数据库,但是还是有问题,使用类似上述配置后得到性能提升:
http://www.tikalk.com/java/performance-tunning-case-study


XX:PermSize=512m -Xms5g -Xmx5g -XX:NewSize=756m -XX:MaxNewSize=756m -XX:SurvivorRatio=6 -XX:GCTimeRatio=2 -XX:ParallelGCThreads=8 -XX:+UseParNewGC -XX:MaxGCPauseMillis=2000 -XX:+DisableExplicitGC

[该贴被banq于2011-04-02 18:22修改过]
[该贴被banq于2011-04-02 18:25修改过]

banq老师,你好,我们现在的服务器配置如下:
windows Server 2008 64位操作系统
内存:64G
应用服务器:glassfish-3.0.1-windows
jre:
java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)

请问这个配置应该怎么微调jvm