dev2dev.bea.com.cn
首页 资源中心 dev2dev学堂 在线技术论坛 专家Blog User Group CodeShare

WebLogic Server 性能优化 (5) JVM篇

2007-12-24 13:32:23 | 评论 (0) | 被访问(912)次

袁玉强
  袁玉强,Dev2Dev ID:JadeYuan 熟悉WebLogic Server,WebLogic Integration及Tuxedo产品。


JVM的优化设置相对前面几篇而言,是最为复杂的,所以我把JVM篇放在了最后。以下描述,如无特殊说明,都是针对Java 1.4.2版本的。

严格来说,本篇并没有深入介绍JVM的调优,主要的是给出一些工具,呵呵

Java,从他出生的那天起,就不是一个单纯的编程语言,而是一个平台,一种思想。除了包含了Java语言本身,还有JDK,JVM以及J2EE(现在叫做Java EE了)规范。对于程序员而言,Java的自动垃圾收集机制是一个特大喜讯。但是,如果你认为有自动垃圾收集机制就可以随意编写Java程序,那么GC给你的将不会是惊喜而是噩梦了。

Java小组给出的JVM规范中,并没有对JVM对于内存的管理给出定义,所以不同的JVM产品的内存管理方面是有很大的差异的。比如Sun的HotSpot就是按代来对JVM内存进行管理的,而IBM AIX JDK就是一大块内存,找到可用的就给你用,而BEA JRockit在R27之前都是类似HotSpot产品的,是按代管理的,但是在R27之后,是可以在按代管理和整个使用之间进行切换的。如果你的WebLogic Server运行在JRockit JVM上,可以在WebLogic Console上看到JRockit当前使用的GC机制,很有可能你就可以观察到JRockit在运行一段时间之后偷偷的切换了GC的策略。

除了JVM产品的差异,还有一个很重要的问题是,Java应用的特性也是影响JVM运行效率的很重要的因素。所以对于JVM调优,很难给出一套可以准确定义的参数,让你的应用可以高效流畅的运行。但是基本上可以有一个可以遵循的方法:除了堆内存参数,其他参数一律先使用默认值,包括GC策略、代的划分等等,然后通过GC的日志并且借助一些工具分析来调整参数,达到更优化设置。

对于Sun HotSpot以及HP HotSpot产品,堆内存的设置通常为-Xms和-Xmx设置为同样大小,以避免在运行过程中JVM向操作系统申请内存带来的消耗。对于大型应用,可以设置到1024~2048。WebLogic Server 8.1认证的JDK都是32-bit的,所以,默认情况下,32-bit的进程最大可以有4GB的寻址能力,但是操作系统要保留2GB,给应用只剩下2GB可用。当然,部分操作系统,例如Windows XP, Windows 2003, HP-UX都有3GB的开关,打开之后可以让用户进程使用最大3GB的地址空间。另外,如果应用比较大,类比较多,通常要设置-XX:PermSize和-XX:MaxPermSize两个参数。

对于IBM AIX JDK,通常设置为-Xms和-Xmx不相等,可以将-Xms设置为-Xmx的1/3~1/2,这样当系统空闲的时候,JVM的堆大小会收缩,在收缩的过程中,整理了内存的碎片,避免因为内存碎片导致出现OOME的错误。

至于GC策略,几乎每种JVM产品都提供了多种GC策略可供选择,但是通常情况下,默认的GC策略可以满足大部分应用需求,并且也是最稳定的。其他的GC策略在某些场景下可能会表现比默认策略好一些。

后续会放上一些JVM内存管理机制的文档。


下面给出一些常用的工具链接:

GC Viewer

http://www.tagtraum.com/gcviewer.html

分析GC日志的工具,支持很多种格式,包括

Sun JDK 1.4/1.5 with the options -Xloggc:<file> [-XX:+PrintGCDetails]
Sun JDK 1.2.2/1.3.1/1.4 with the option -verbose:gc
IBM JDK 1.3.1/1.3.0/1.2.2 with the option -verbose:gc
HP-UX JDK 1.2/1.3/1.4.x with the option -Xverbosegc
BEA JRockit 1.4.2/1.5 with the option -verbose:memory
Best results are achieved with: -Xloggc:<file> -XX:+PrintGCDetails

但是个人感觉如果GC日志比较大的话,用起来比较慢一些。但是支持这么多种格式,已经很不错了。


HPjtune

http://www.hp.com/products1/unix/java/java2/hpjtune/

HP自己的产品,分析HP JVM的好工具。最重要的是有一个Simulation的功能,可以让你在这个工具中修改JVM参数,然后生成模拟GC日志,来比较哪种更优化。


IBM Pattern Modeling and Analysis Tool for Java Garbage Collector

http://www.alphaworks.ibm.com/tech/pmat

分析IBM AIX JDK GC日志的工具,同时也支持Sun HotSpot和HP 的GC日志。ps:个人觉得IBM的JVM在做kill -3的时候生成独立的Thread Dump文档时非常好的,比起其他JVM需要在stdout中自己寻找,要方便N倍了。并且在Thread Dump中还包含了很多有用的其他信息。


有谁用过其他比较好的,也希望帖出来共享一下。

Technorati 标签: ,,


Tags:
文章评论:(以下网友留言只代表个人观点,不代表BEA观点和立场)
暂时没有评论!

2007年12月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
RSS订阅

袁玉强's Blog搜索