一.JRockit调优简介
JRockit是一个自适应的JVM,它能够自动调整自己去适应底层硬件,因此对它的调优主要集中在一些需要人工干预的参数上,比如说:需要划分多少RAM给JRockit使用等。JRockit有一组非标准的-X启动选项,我们可以用它来调节JVM。JRockit有两组主要的子系统可以被优化--内存管理系统(包括垃圾回收)和线程系统。在内存管理子系统方面,有很多调优的工作可以做。
二.TuningWebLogicJRockitJVM
1.设置初始堆尺寸
可以通过-Xms:<size>m来设置初始堆大小,如果-Xmx的值小于128MB,则-Xms缺省取值为16MB;如果-Xmx设置大于128MB,则-Xms缺省值为物理内存的25%,最大不超过64M。例子:
-Xgc:gencon-xms:64m-Xmx:64mmyClass
2.设置最大堆尺寸
可以通过-Xmx:<size>m来设置最大堆尺寸。在IA32构架下,由于操作系统给每个进程的最大内存寻址空间为1.8G,因此最大堆尺寸不能超过1.8G。在IA64构架下,就没有1.8G的限制。
如果你的JAVA应用程序在运行时出现了Outofmemory的错误,你就需要调大最大堆尺寸。如果没有设置最大堆尺寸,则缺省值为:
1.如果设置了-Xgc:gencopy,由最大堆尺寸是min{400,物理内存*75%};
2.如果没有设置-Xgc:gencopy,由最大堆尺寸是min{1536,物理内存*75%};
最好手工把最大堆尺寸设置为物理内存(1024M)的75%:
-Xgc:gencon-xms:64m-Xmx:768mmyClass
3.设置Nursery的尺寸
可以使用-Xns:<size>来设置Nursery的尺寸,我们要在保证垃圾回收停顿时间(garbagecollection-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.thinthreads:最小线程栈尺寸为8K,缺省为64K;
2.nativethreads:最小线程栈尺寸为16K
如果-Xss设置小于最小值,则自动使用最小值。
缺省值:
1.IA32系统,WIN32:64K,LINUX32:128K
2.IA64系统,WIN64:320K,LINUX64:1M
二.BasicTuningTipsandTechniques
尽管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.使用IntelVTune工具;
2.使用-Xjvmpi:allocs=off,monitors=off,entryexit=off选项。
三.CommandLineOptionsbyName
启动JRockit时,可以带一些-X选项,这些选项是非JVM标准的,专门用于配置JRockit的性能。
选项
描述
-X
显示扩展Java选项
-Xallotype
-Xallocationtype
可取值global和local,定义使用本地线程还是全局线程。
-Xbootclasspath
指定类搜索路径,可以是ZIP和JAR文件,以;或:分隔
-Xcleartype
定义内存清理时机,可取值gc,local,alloc。gc表示在垃圾回收时清理内存;local表示时分配一块local线程区时清理;alloc表示内存区要被分配给其它对象时清理
-Xgc
选择要使用的垃圾回收器的类型,可取值:
gencopy:generationalcopying
singlecon:singlespacedconcurrent,单空间并发
gencon:generationalconcurrent
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
作完整的bytecode一级的校验
四.用JRockit8.1中的MethodProfiler调优WebLogic
1.关于MethodProfiler工具
BEAWebLogicJRockit8.1提供了一个Profiling工具:MethodProfiler来调优WebLogic应用。
2.利用MethodProfiler调优WebLogic应用
JRockit8.1所带的MethodProfiler工具能够将所有在JRockitJava虚拟机上执行的成员方法的调用次数、执行的总时间和每次调用的执行时间都统计出来,如图1所示。这样的功能一来可以让我们对跑在WebLogic上的应用进行tuning(代码级的),二来也大大方便了我们确定系统瓶颈在何处。这也可以说是JRockitJVM相对于其他JVM在功能上的一大优势。
在一次对WebLogicServer8.1的压力测试中,对一组包含了CMP特性的样本进行压力测试时,就利用JRockit的MethodProfiler诊断出了系统的瓶颈所在,现介绍如下。CMP这组样本中原先对CMPEntityBean的操作除了用ejbCreate插入一条记录之外,紧跟着用setName方法设置其name属性,即UPDATE其对应数据库记录中name域的值,代码如下:
publicvoidejbCreate()//Stateful4CMPBean中的方法
throwsCreateException
{
try
{
Contextctx=newInitialContext();
SheepHomehome=(SheepHome)ctx.lookup("Sheep");
Sheepsheep=null;
intx=getNextId();//getNextId()也包含对数据库的操作
sheep=home.create(x);
if(sheep!=null)
{
sheep.setName("sheep1".concat(String.valueOf(String.valueOf(x))));
m_strMsg="createsheep".concat(String.valueOf(String.valueOf(x)));
}else
{
m_strMsg="Thesheepnameisnotcreated.";
}
}
catch(Exceptione)
{
m_strMsg=
"***someexceptionoccured!(CMP)".concat(String.valueOf(String.valueOf(e.getMessage())));
}
}
此时测出来的数据,TPS平均值非常低,且测试时ResponseTime总是随着时间的增长几乎呈线性攀升。于是用MethodProfiler进行诊断:
(1)在JRockit的启动参数中加入-Xmanagement,以便启动JRockit的时候同时启动其ManagementServer。
(2)启动JRockitManagementConsole,并且将其连接到启动了的ManagementServer上。(在做压力测试时用JRockitManagementConsole进行观察对性能的损耗可以忽略不计)
(3)在JRockitManagementConsole中,将ToolsàPreferences菜单中的Modeofoperation属性设为developer。
(4)在MethodProfiler属性页中添加你所需要观察的类的成员方法。
(5)按Start按钮让MethodProfiler开始进行统计。
Time/Inv(ns)指标的显示结果表明Stateful4CMPBean.ejbCreate()代码所含逻辑成为了系统的瓶颈。结果又显示getNextId()和home.create()操作消耗的时间只占Stateful4CMPBean.ejbCreate()的一小部分,而sheep.setName()操作消耗的时间却占了Stateful4CMPBean.ejbCreate()的剩下的(指除去getNextId()和home.create()操作消耗的时间)绝大部分。
于是又用MethodProfiler作了一系列实验,结果如下:用1个用户做压力测试,sheep.setName()操作消耗的时间为X,getNextId()操作消耗的时间为Y,home.create()操作消耗的时间为Z;用2个用户做压力测试,sheep.setName()操作消耗的时间约为2X,getNextId()操作消耗的时间约为Y,home.create()操作消耗的时间约为Z;用3个用户做压力测试,sheep.setName()操作消耗的时间约为3X,getNextId()操作消耗的时间约为Y,home.create()操作消耗的时间约为Z。可以比较肯定地判断,sheep.setName()执行的是一个串行化的逻辑。检查Oralce中UPDATE的ISOLATION-LEVEL,果然为SERIALIZABLE。
将sheep.setName("sheep1".concat(String.valueOf(String.valueOf(x))));这句代码删掉。
重新测试,TPS平均值有很大幅度的提高,ResponseTime在压力测试开始一段时间后也趋于平稳,几乎呈水平线走势。
分享到:
相关推荐
J2EE应用的性能调优是一个系统工程,涉及到应用代码、服务器配置、数据库管理和操作系统等多个层面。通过上述策略的综合应用,可以显著提升BEA WebLogic平台下的J2EE应用性能,满足企业对高效、稳定服务的需求。调优...
如果使用的是BEA jRockit虚拟机,则需要针对其特性进行相应的调优工作。 ##### 2.2 Server调优 **2.2.1 使用本地I/O库** 尽可能使用本地I/O库(如NIO)来提高I/O操作的效率。 **2.2.2 调整默认执行线程数** ...
在BEA WebLogic平台上进行J2EE调优是提高应用程序性能和稳定性的重要步骤。这篇文章将带你深入了解如何在各个层面上优化你的系统。 首先,我们从应用程序本身的调优开始。通用代码调优涉及到优化代码逻辑,减少不必...
为了提升系统的稳定性和响应速度,对WebLogic进行合理的性能调优显得尤为重要。本文将详细介绍如何针对WebLogic服务器进行性能优化的方法。 #### 一、监控并调整线程池配置 1. **检查线程池状态**:首先,通过...
Bea官方推荐在x86架构的32位操作系统上使用Bea JRockit JVM,因为JRockit具有自我适应硬件的特性,能自动调整以提高执行性能。JRockit提供了非标准的-X启动选项,允许我们进行更细致的内存管理和线程系统优化。 二...
WebLogic Server支持多种JVM,包括SUN HotSpot JVM和BEA JRockit JVM。不同的JVM具有不同的参数设置和监控工具,JRockit JVM在Intel架构和Windows平台上性能更好。 三、WebLogic实例的设置 WebLogic实例的设置包括...
同时,它支持JRockit JVM,提供更高级别的性能分析和调优功能。 6. **安全增强**: 除了WS-Security外,9.0版还强化了认证、授权和审计机制,支持SSL/TLS加密,以及与Active Directory、LDAP等目录服务的集成,保障...
WebLogic Server 可以使用不同的 JVM,包括 SUN HotSpot JVM 和 BEA JRockit JVM。不同的 JVM 有不同的参数设置和监控工具。例如,JRockit JVM 在 Intel 架构和 Windows 平台上可以带来更好的性能。 3. WebLogic ...
随着J2EE软件在各个行业的广泛应用,系统的性能调优成为软件开发者和应用服务器提供商关注的重点。最终用户对于高效、稳定的业务需求已经成为最基本的要求。因此,J2EE调优变得至关重要。BEA WebLogic Server作为...
Some BEA products require multiple license keys for full functionality, or use a license key which is not intuitively identified as being for that ...BEA JRocKit Mission Control 3.0 LIC-JRMC30.txt
### WebLogic 8.1 性能调优详解 #### 一、WebLogic 8.1简介 WebLogic Server 是一款高性能的企业级应用服务器,由BEA Systems开发,后被Oracle收购并继续维护和发展。WebLogic 8.1 版本在企业应用部署和服务方面...
文档中提及的BEA、JRockit、LiquidData for WebLogic、WebLogic Server等均为BEA Systems, Inc.的注册商标,BEA AquaLogic、Builder、Campaign Manager for WebLogic等为BEA Systems的产品或服务标记。 总之,...
对于使用JRockit JVM的Weblogic环境,还应考虑JRockit特有的内存管理和性能监控工具,如Mission Control,它提供了深入的诊断能力和实时监控功能,有助于更准确地定位和解决内存问题。 #### 参考文献与进一步阅读 ...
### WebLogic 9.x 内存溢出监控与BEA JRockit使用详解 #### 一、概述 本文档主要探讨了在WebLogic Server 9.x环境下如何有效地监控内存使用情况,尤其是针对内存溢出(OutOfMemoryError)问题的监测与解决策略。...
在本例中,这些路径位于`bea\jdk142_11`和`bea\jrockit81sp6_142_10`文件夹内。 - 进入这两个文件夹中的`jre\lib\zi`和`jre\lib\zi\Etc`目录,这里存放着时区相关的文件。 2. **备份原有时区文件**: - 在进行...
此课程对于希望深入了解WebLogic Server内部机制并进行性能调优的IT专业人员来说,是非常宝贵的资源。 #### 企业成功的关键 文档强调了知识在现代企业中的重要性,特别是对于决策者、IT专业人员以及最终用户而言,...
JRockit远程监控Linux环境下WebLogic方案是针对Java应用服务器WebLogic在Linux操作系统上的性能管理和故障排查的一种技术。在大型企业系统中,由于复杂的业务逻辑和大量数据处理,内存泄漏成为常见的问题,往往在...
本文档旨在为读者提供WebLogic服务器的优化指南,涵盖Java参数设置、GC优化、堆栈内存优化、监视堆栈使用情况、设置与性能有关的配置参数等方面的知识点。 一、Java参数设置 在WebLogic服务器中,Java参数设置是...