weblogic调优之JVM(JROCKIT)
weblogic 2009-05-06
可以首先采用测试命令得到机器的jvm允许分配的堆的大小
格式: java -Xmx1024M -version 其中的值可以根据实际的情况测试得到
***************************************
 JRockit是一个自适应的JVM,它能够自动调整自己去适应底层硬件,因此对它的调优主要集中在一些需要人工干预的参数上,比如说:需要
划分多少RAMJRockit使用等。JRockit有一组非标准的-X启动选项,我们可以用它来调节 JVMJRockit有两组主要的子系统可以被优化--
内存管理系统(包括垃圾回收)和线程系统。在内存管理子系统方面,有很多调优的工作可以做。
1、设置初始堆的大小
--------------------
可以通过-Xms:<size>m来设置初始堆大小,如果-Xmx的值小于128MB,则-Xms缺省取值为16MB;如果-Xmx设置大于128MB,则jvm调优参数-Xms缺省值为物
理内存的25%,最大不超过64M。例子:
-Xgc:gencon -xms:64m -Xmx:64m myClass
 
2、设置最大尺寸
---------------------
可以通过-Xmx:<size>m来设置最大堆尺寸。在IA32构架下,由于操作系统给每个进程的最大内存寻址空间为1.8G,因此最大堆尺寸不能超过
1.8G。在IA64构架下,就没有1.8G的限制。
如果你的JAVA应用程序在运行时出现了Out of memory的错误,你就需要调大最大堆尺寸。如果没有设置最大堆尺寸,则缺省值为:
1 如果设置了-Xgc:gencopy,由最大堆尺寸是min{400, 物理内存*75%}
2 如果没有设置-Xgc:gencopy,由最大堆尺寸是min{1536, 物理内存*75%}
最好手工把最大堆尺寸设置为物理内存(1024M)的75%
-Xgc:gencon -xms:64m -Xmx:768m myClass
 
3、设置Nursery的尺寸
----------------------
可以使用-Xns:<size>来设置Nursery的尺寸,我们要在保证垃圾回收停顿时间(garbage collection-pause)尽可能短的同时,尽量加大
Nursery的尺寸,这在创建了大量的临时对象时尤其重要。缺省值为:
1 对于-Xgc:gencopy,缺省的Nursery大小为320KB/CPU,对于10CPU的系统来说,Nursery大小为3200KB3.2M
2 对于-Xgc:gencon,缺省的Nursery大小为10M/CPU,对于10CPU的系统来说,Nursery大小为100M
 
4、定义内存空间的清理时机
--------------------------
可以使用-Xcleartype:<gc|local|alloc>来定义已经被垃圾回收的内存空间在什么时候可以被清理,支持以下三种方式:
1 gc,在垃圾回收的同时清理内存;
2 local,在分配了一块thread-local区域时清理内存,仅在把参数-Xallocationtype设置成local时才有用;
3 alloc,在这块内存被分配给其它对象时清理。在IA64上目前还不支持。
缺省值为:
1 IA32上缺省值为alloc
2 IA64上缺省值为gc
 
5、定义线程分配的类型
--------------------------
可以使用-Xallocationtype:<global|local>来定义线程分配的类型。
1 global,在最大堆尺寸比较小时(小于128M)或者应用程序大量使用了线程时使用。
2 local,在最大堆尺寸比较大时(大于128M)或者应用程序少量使用了线程时使用。
缺省值:
1 如果设置了-Xgc:gencopy,缺省值为global