background image

Java 虚拟机:JVM 的调优参数选择

在任何一个的生产系统上线前,系统性能调优(Tuning)都是很重要的一步。通常,应用系
统的软硬件的缺省值都是给开发平台(或小规模系统)设计的,用来跑生产系统几乎都无
法发挥出软硬件的最佳性能。有时,系统调优前后的性能会差好几倍。另一方面,由于应
用程序的开发人员通常都是针对功能作开发的,因此,开发硬件都是比生产环境要小的
机器。例如,生产系统是一台 8 个 CPU,64GB 内存的服务器,而开发服务器可能只有 1
个 CPU 和 4GB 内存。所以,在开发人员中常常不具备做性能方面测试的软硬件环境。另
外,有的程序员甚至在开发时都没有考虑到多用户并发的环境,程序中存在单点瓶颈等
问题。在做压力测试和调优时,往往就会发现这些关键点。

  由于应用系统是个软硬件的完整统一体,系统调优往往需要涉及硬件、网络、操作系
统、中间件,应用程序和数据库等方面。在调优的过程中,往往需要发现存在瓶颈的地方
(也就是导致系统变慢的部分),分析原因,从而改进和确定较优的参数。

  我们在作 JVM 的调优前,通常先要了解运行的硬件平台,操作系统和中间件,然后
针对这些情况配置相应的系统参数,在测试中不断完善参数。由于性能调优需要对系统非
常了解,并且需要丰富的经验,因此不是一件容易的事情。这里介绍一些很好的参考资料,
就是 SPEC.org 的网站。这是硬件厂商公布 benchmark 测试结果的地方,通常硬件厂商
会把系统调到最优化才公布结果的,因此很有借鉴意义。常见和 JVM 有关的 benchmark
值主要有 SPECjAppServer2004 和 SPECjbb2005。前者是 J2EE 应用服务器的性能指标,
后者是服务器端 Java 虚拟机的性能指标。给大家介绍这个网站的目的是说大家可以参考
硬件厂商给出的 JVM 配置,在根据自己应用环境的特点,较快的得出较好的参数。例如,
这 个 网 页 给 出 了 SUN 公 司 T5120 服 务 器 + 应 用 服 务 器 9.1   +JDK1.5 的
SPECjAppServer2004 值是 8,439.36:

  我们现在要关心的不是 Benchmark 的值(注:实际上,Sun 公司的这个值是个很不
错的结果),而是留意在这种环境下 JVM

的参数配置,可以找到一个栏目 Notes / 

Tuning Information”:
  JVM Options: -server -XX:+AggressiveHeap

  -Xmx2560m -Xms2560m -Xmn1024m -Xss128k
  -XX:PermSize=256m
  -XX:+DisableExplicitGC
  -XX:ParallelGCThreads=24
  -XX:LargePageSizeInBytes=256m
  -XX:+UseParallelOldGC
  -XX:+AggressiveOpts