首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

jrockit相干资料

2012-08-28 
jrockit相关资料内部的一个系统极耗内存,所以,tomcat的几个内存参数要设的比较大。但内存过大,tomcat又启动

jrockit相关资料

内部的一个系统极耗内存,所以,tomcat的几个内存参数要设的比较大。但内存过大,tomcat又启动不起来了。最后义宏想到用eba的Jrockit取代sun的jdk,今天试了一下,果然很好很强大。
不过对这个东东还不熟,查了查相关资料,如下:
---------------------------------
一.JRockit调优简介
JRockit是一个自适应的JVM,它能够自动调整自己去适应底层硬件,因此对它的调优主要集中在一些需要人工干预的参数上,比如说:需要划分 多少 RAM给JRockit使用等。JRockit有一组非标准的-X启动选项,我们可以用它来调节JVM。JRockit有两组主要的子系统可以被优化-- 内存管理系统(包括垃圾回收)和线程系统。在内存管理子系统方面,有很多调优的工作可以做。


二.Tuning WebLogic JRockit JVM
1.设置初始堆尺寸
可以通过-Xms:<size>m来设置初始堆大小,如果-Xmx的值小于128MB,则-Xms缺省取值为16MB;如果-Xmx设置大于128MB,则-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,对于10个CPU的系统来说,Nursery大小为3200KB(3.2M)
2. 对于-Xgc:gencon,缺省的Nursery大小为10M/CPU,对于10个CPU的系统来说,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
2. 如果设置了-Xgc:siglecon,-Xgc:gencon和-Xgc:parallel,缺省值为local
6.定义线程栈尺寸
可以使用-Xss<size>[k|K][m|M]来定义线程栈大小。最小线程尺寸定义如下:
1. thin threads:最小线程栈尺寸为8K,缺省为64K;
2. native threads:最小线程栈尺寸为16K
如果-Xss设置小于最小值,则自动使用最小值。
缺省值:
1. IA32系统,WIN32:64K,LINUX32:128K
2. IA64系统,WIN64:320K,LINUX64:1M

二.Basic Tuning Tips and Techniques
尽管JRockit提供了一组缺省的OOTB配置选项,但最好根据实际应用情况来对JRockit作一些调整。
1.决定你要在哪方面调优
要考虑的因素有:
1. 要为JRockit分配多少内存空间;
2. 你要调优的目的是什么,是要得到更好的响应性还是更好的性能;
2.设置堆尺寸
对于堆尺寸来说,当然是越大越好了。如果设得不够大,就会造成Out-of-memory和内存分页错。如果同时运行了多个应用程序,建议把最小和最大堆尺寸设置成一样大。
3.在高响应性方面的调优
要得到更好的响应性能,应该设置
1. 使用并发垃圾回收器。-Xgc:gencon
2. 设置初始和最大堆大小。-Xms512m,-Xmx768m,由于使用了并发垃圾回收器,所以堆大小不会造成长时间的等待。
3. 设置nursery尺寸。如果用到了大量的临时对象,则需要适当的调大nursery尺寸。调大nursery尺寸会导致垃圾回收的停顿时间加长,因此要注意,确保垃圾回收的停顿时间在可忍受的范围内,这个停顿时间可以通过设置-Xgcpause来查看。
4.在高性能方面的调优
如果要得到更好的性能,你应该:
1. 选用并行垃圾回收器,由于并行垃圾回收器不使用nursery,因此你不必再设置-Xns,方法是加上-Xgc:parallel
2. 把初始和最大堆尺寸设置调到尽可能的大。方法是-Xms512m, -Xmx768m。
5.分析垃圾回收和停顿时间
1. 使用-Xgcreport生成报表,显示垃圾回收的统计信息,从中可以看出你是不是最有效地使用了垃圾回收器。
2. 使用-Xverbose:memory来显示在运行期间每一次垃圾回收的停顿时间。本选项仅用于调试,会产生大量的控制台输出。
6.调整线程选项
当大量地使用了线程时(超过100个),需要调整线程选项:
1. 使用thin线程选项。-Xthinthreads。瘦线程模式在LINUX下非常有效。注意:瘦线程在JRockit中只是一个试验选项,不推荐广泛使用;
2. 关闭本地分配线程的选项。-Xallocationtype:global。每个本地线程区都要消耗大约2K的内存,如果大量地使用了线程,本地线程不但会造成内存空间浪费,而且还会造成堆碎片。使用全局线程机制会减少堆碎片,但在内存分配方面速度要慢一些。
7.分析并改善应用程序设计
找出瓶颈方法:
1. 使用Intel VTune工具;
2. 使用-Xjvmpi:allocs=off,monitors=off,entryexit=off选项。

三.Command Line Options by Name
启动JRockit时,可以带一些-X选项,这些选项是非JVM标准的,专门用于配置JRockit的性能。
选项

描述

-X


显示扩展Java选项

-Xallotype

-Xallocationtype


可取值global和local,定义使用本地线程还是全局线程。

-Xbootclasspath


指定类搜索路径,可以是ZIP和JAR文件,以;或:分隔

-Xcleartype


定义内存清理时机,可取值gc, local, alloc。gc表示在垃圾回收时清理内存;local表示时分配一块local线程区时清理;alloc表示内存区要被分配给其它对象时清理

-Xgc


选择要使用的垃圾回收器的类型,可取值:

gencopy:generational copying

singlecon:single spaced concurrent,单空间并发

gencon:generational concurrent

parallel:parallel

如果-Xmx小于128M,缺省使用gencopy,否则使用gencon

-Xgcpause


打印由垃圾回收器造成的停顿时间

-Xgcreport


打印垃圾回收报表

-Xjvmpi


是否允许JVMPI事件,这些事件有:

entryexit(缺省ON)

allocs(缺省ON)

monitors(缺省ON)

arenasdelete(缺省OFF)

-Xmanagement


激活JVM中的管理服务器,在JVM的管理控制台能连接到它之前,必须先激活。

-Xms


设置初始堆大小,单位有K、M、G

-Xmx


设置最大堆大小,单位有K、M、G

-Xnativethreads


使用本地线程系统,这是缺省选项

-Xnoclassgc


禁止对类作垃圾回收

-Xnohup


告诉JRockit,忽略CTRL_LOGOFF_EVENT和SIGHUP事件

-Xns


设置nursery尺寸,单位有K、M、G

-Xss


设置线程栈尺寸,单位有K、M、G

-Xthinthreads


使用JRockit的高性能线程系统,在IA64上不可用。

-Xverbose


让JRockit打印更多的信息,可选的参数有:

codegen、cpuinfo、gc、load、memory、Opt

-Xverify
--------------------------------

1. 进入到jrockit/bin目录下
2. 打./jrcmd 回车,会看到当前所有在执行中的java进程的PID号
3. 打./jrcmd [PID] help 回车,会看到指定java进程支持的操作
4. 打./jrcmd [PID] print_threads > xxxFile,可以把当前java进程中的所有线程堆栈轨迹打印到指定文件中
-------------------------------
jRockit支持四种垃圾收集器:分代复制收集器、单空间并发收集器、分代并发收集器和并行收集器。默认状态下,JRockit使用分代并发收集器。要改变收集器,可使用-Xgc:<gc-name></gc-name>,对应四个收集器分其他为gencopy, singlecom, gencon以及parallel。为得到更好的响应性能,应该使用并发垃圾回收器:-Xgc:gencon,可使用-Xms和-Xmx设置堆栈的初始大小和最大值,要设置护理域-Xns为-Xmx的10%。而如果要得到更好的性能,应该选用并行垃圾回收器:-Xgc: parallel,由于并行垃圾回收器不使用nursery,不必设置-Xns。
??? 如果你的线程大于100或者在linu平台下 ,可以尝试使用瘦线程模式:-Xthinthread,同时关闭Native
IO:-Xallocationtype:global。

jrockit相干资料jrockit相干资料,可以尝试使用瘦线程模式:-Xthinthread,同时关闭Native
IO:-Xallocationtype:global。

------------------------------

jRockit 还提供了强大的图形化监控工具Jrockit Management Console

jrockit已经不需要-XX:PermSize这样的参数了
注:所谓PermSize,是指vm为类描述信息分配的内存空间,随着动态类等技术的广泛应用,这 一内存区默认的64M大小已经不能满足需要,而且,sun vm对这部分内存居然无法进行gc,所以需要设置一个比较大的PermSize。但长时间运行后特别是频繁进行JavaEE应用部署的话,仍然会出现 out of memory异常。

热点排行