Thursday, August 9, 2007

Java的性能调校



以前做Java的项目,基本上不会遇到对性能进行调校的事情,但是最近遇到了一个比较严重的问题。具体情况不便详细说,但是大致情况如下:

  • Server: Intel Xeon Duo 2 *2

  • Memory: 4G

  • Disk: 3500G

  • JDK: 1.5.0_02

  • Web Server: Tomcat 5.5.19

  • Application: Some kind of OpenSource Project A which contains about 27M's package.


在Tomcat中配置了虚拟主机,运行了4份A的独立版本。运行起来以后,内存占用3G左右,在安装第5份的时候出现OutOfMemory的异常,由此引发了JVM性能调校的课题。

首先找到了一片比较浅显的文档:

其中提到了性能调校的几个要点:

  • 在所有对JVM的调校进行之前,先做以下的检查:

    1. 是否使用了最新的Java Release?

    2. Java是否更新到了最新的update?

    3. OS的补丁是否已经更新到最新?

    4. OS中是否还跑着其他许多不需要的应用程序?



  • 其次对JVM进行以下的调校:

    1. 是否使用了Server HotSpot?

    2. 有没有使用并行GC?(ParallelGC)

    3. 初始化堆内存(heap size)大小是多少?推荐使用物理内存的1/64

    4. 最大堆内存(heap size)是多少?推荐使用物理内存的1/4



  • 调校之前一定要准确的收集系统的运行情况数据并进行分析

    1. 可以参考使用JVM的管理与监视相关文档




在这样的指导下。我准备对我的系统做以下的操作步骤:

  • 使用JConsole观察Tomcat中JVM的使用情况,并进行分析

  • 使用jvmstat观察并进行分析

  • 在Tomcat的运行参数中添加 -Xprof 参数,进行Profiling


在Java tuning white paper中直接提到了一些GC调整的方式,在使用了ParallelGC以后,系统的运行确实能提高不少,但是具体的仍然有问题,等我的Monitoring和Profiling结束以后再报告。

No comments:

Post a Comment