您的位置:首页 > 其它

WebLogic Server10.0手册翻译(WebLogic Server Performance and Tuning册的第五章)

2008-09-26 12:58 453 查看
WebLogic Server Performance and Tuning

WebLogic Server性能调整

CHAPTER5
Tuning Java Virtual Machines (JVMs)
调整java虚拟机

Garbage Collection
垃圾回收


VM Heap Size and Garbage Collection
虚拟机堆大小和垃圾回收


java堆是java对象存活的地方。其中存有live对象,dead对象和空闲内存。当正运行的程序中某个对象不可达时,它就被认为是“garbage”并且准备被回收。一个最优方法是调整垃圾回收时间在执行时间的5%之内。
java虚拟机的堆大小决定了虚拟机垃圾回收的频率和用时。要在分析垃圾回收的时间运行时间和频率后再将对大小调整到一个可接受的比率。如果堆设置的大了,full GC 一次就变慢,但发生频率低。如果根据你的需要设置堆大小,则full GC一次就变快,但是发生频率高。
调整堆大小的目标是,使给定时间内weblogic server能服务的客户数最大化,与此同时,使java虚拟机花在垃圾回收上的时间最小化。在benchmarking内为了确保性能,你可能设置很大的堆大小以确保在整个benchmark运行中都不发生垃圾回收。

如果在没有堆空间的情况下运行,你会看到如下错误:
java.lang.OutOfMemoryError <<no stack trace available>>
java.lang.OutOfMemoryError <<no stack trace available>>
Exception in thread "main"
Choosing a Garbage Collection Scheme
选择垃圾回收计划


根据所使用的java虚拟机,可以从几个垃圾回收计划来管理你的系统内存。例如,某些垃圾回收计划更适合特定应用。一旦,对应用程序的工作负责和java虚拟机所使用的不同垃圾回收算法有所理解,就可以优化垃圾回收的配置。
Using Verbose Garbage Collection to Determine Heap Size
用verbose垃圾回收决定堆大小


verbose垃圾回收选项(verbosegc)使你可以精确测量用在垃圾回收的时间和资源。为了确定最高效的对大小,可开启verbose垃圾回收,并重定向日志文件一进行诊断。
下面步骤说明了这个过程:

1.当你的应用程序运行在最大负载下的时候,监视weblogic性能。

2.用-verbosegc选项启用verbose垃圾回收输出并重定向标准错误和标准输出到日志文件。

places thread按照weblogic server 信息和错误消息的适当顺序,进行转储,并提供了用于诊断的日志文件。(本段原文:This places thread dump information in the proper context with WebLogic Server informational and error messages, and provides a more useful log for diagnostic purposes.)

例如:在windows和sorlaris中,加入如下内容:
% java -ms32m -mx200m -verbosegc -classpath $CLASSPATH
-Dweblogic.Name=%SERVER_NAME% -Dbea.home="C:/bea"
-Dweblogic.management.username=%WLS_USER%
-Dweblogic.management.password=%WLS_PW%
-Dweblogic.management.server=%ADMIN_URL%
-Dweblogic.ProductionModeEnabled=%STARTMODE%
-Djava.security.policy="%WL_HOME%/server/lib/weblogic.policy"
weblogic.Server
>> logfile.txt 2>&1
wlogfile.txt 2>&1 命令将标准错误和标准输出重定向到一个日志文件。
在 HPUX上, 用下列选项重定向标准错误和标准输出到一个文件:

-Xverbosegc:file=/tmp/gc$$.out

$$映射为java进程的ID(PID)。因为输出包含垃圾回收时的时间戳,由此你可以推断出垃圾回收的频率。

3.分析下列数据点:

a.垃圾回收多长时间发生一次?在weblogic.log文件中,对比垃圾回收的时间戳。

b.垃圾回收花了多长时间?full GC 时间不能长于3-5秒

c.你的内存平均占用率是多少?换句话说,在每次Full GC后,有多少堆数据驻留在堆中。如果堆总是保持85%的空闲,你可以把堆设置的小点。

4.再检查一下New generation 对大小(sun)或Nursery大小(BEA Jrockit)

5.确保对大小不大于系统可用空闲内存

在不使系统内存和磁盘的换页的情况下,使用尽可能大的堆大小。系统的空闲内存依赖于你的硬件配置及正在运行的进程的内存占用。找系统管理员,以确定你的系统的空闲内存数量。

6.如果发现系统在垃圾回收上花了太多时间(分配的虚拟内存超出了RAM),就减小堆大小。
典型的,你应该设置可获得RAM(没有被系统或其他进程占用的)的80%给java虚拟机。

7.如果发现有大量的空闲内存,那么运行更多的weblogic server实例在你机器上。
记住,调整堆大小的目标是,使给定时间内weblogic server能服务的客户数最大化,与此同时,使java
虚拟机花在垃圾回收上的时间最小化。

Specifying Heap Size Values
指定堆大小的值


系统性能很大程度上是受jvm可获得java堆的大小的影响。这部分介绍设置对大小值的命令行选项。在每次启动weblogic server实例的时候必须指定java堆大小。这个设置可以在java命令行或者通过修改样例启动脚本的默认值来完成。这个启动脚本在weblogic server启动的时候被提供。(that are provided with the WebLogic distribution for starting WebLogic Server)
Tuning Tips for Heap Sizes
堆大小的调节技巧


下面介绍调整对大小的一般性指导方针:

堆大小应该设置为适当的值,以使虚拟机可用内存最大并且不超过可用物理内存。如果超过,操作系统就好启动页面交换,性能急剧下降。虚拟机总是使用比对大小更多的内存。虚拟机内部功能所需内存、虚拟机以外的本地内存和permanent generation内存(对于sun的虚拟机来说只有存储类和方法的内存)都在堆内存之外被分配。

当使用一代的垃圾回收计划的时候,nursery size不应该超过java堆大小的一般。典型的,设置为堆大小25%到40%是比较适合的。

在产品环境下,要把最小堆大小和最大堆大小设置为相同值,以防止把虚拟机资源浪费在经常性的增长和缩小堆。这也使用于New generation heap sizes(sun)和Nursery size(BEA Jrockit)。

Java HotSpot VM Heap Size Options
java HotSpot 虚拟机堆选项


通过分别调整各个应用获得最佳性能。然而,表5-3列出了weblogic server提高大多数应用性能的Java HotSpot VM Heap Size Options。
这些选项不依赖于你的系统结构和操作系统。参考你的特定平台厂商文档的虚拟机调整选项。
表5-3

任务选项注释
设置New generation 堆大小-XX:NewSize 作为一般的规则,设置-XX:NewSize为堆大小的1/4。增加这个选项的值来增加短生命周期的对象数量
设置 maximum New generation 堆大小-XX:MaxNewSize设置New Generation 堆大小的最大大小
设置New heap size ratios-XX:SurvivorRatio New generation 区域被分成三个子区域:Eden、和两个大小相等的survivor spaces。配置Eden/survivor space size的比例。试着设置这个值为8,然后监视垃圾回收
设置最小堆大小-Xms作为一般性规则,设置最小堆大小(-Xms)等于最大堆大小(-Xmx)以最小化垃圾回收。
设置最大堆大小-Xmx
设置最大堆的大小
设置Big Heaps和Intimate Shared Memory-XX:+UseISM

-XX:+AggressiveHeap
参考http://java.sun.com/docs/hotspot/ism.html
例如,当从java命令行启动weblogic server的时候,应该指定HotSpot VM堆的大小,如下:

$java -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8 -Xms512m -Xmx512m

这些值的默认大小以字节为单位。附上"k"或"K"表示kilobytes,"m"或"M"表示megabytes,"g"或"G"表示gigabytes。上面的例子,分配了128m New generation和最大New generation堆,分配了512m 最大最小堆内存给jvm上的weblogic server实例。
Other Java HotSpot VM Options
其他java HotSpot 虚拟机选项


sun提供了其他标准和给标准的命令行选项来改进虚拟机性能。如何应用这些选项取决于应用程序的编码。

测试client和server JVM来观察哪个选项使特定应用性能提高。Sun Microsystems 的java HotSpot选项文档提供了关于能影响Java HotSpot虚拟机的性能的命令行选项和环境变量的信息。参考http://java.sun.com/docs/hotspot/VMOptions.html.

此外,还有HotSpot虚拟机选项的例子,参考:

Standard Options for Windows (Win32) VMs at
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html.

Standard Options for Solaris VMs at
http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/java.html.

Standard Options for Linux VMs at
http://java.sun.com/j2se/1.5.0/docs/tooldocs/linux/java.html.

Sun Microsystems’ Java Virtual Machine文档提供了java虚拟机(J2SE5.0)的Client和Server实现细节的讨论,参见:http://java.sun.com/j2se/1.5.0/docs/guide/vm/index.html.
Automatically Logging Low Memory Conditions
低内存条件自动记入日志


weblogc server能自动由server将低内存条件记入日志。weblogic server在特定时间间隔检查空闲内存的大小来探测低内存。在时间间隔的结束,空闲内存的平均值被记录,并与下一个时间间隔的平均值对比。如果这个平均值在采样时间间隔后低于用户配置的数量,server就把低内存警告信息记录在日志文件中,并且将server的健康状态为“warning”
Manually Requesting Garbage Collection
手动请求垃圾回收


从Administration Console的角度你会发现手动请求full GC是很必要的。当这么做的时候,记住垃圾回收成本是相当高的,因为jvm经常检测每个活动对象。
Requesting Thread Stacks
请求线程栈


在调优应用程序的时候,显示线程栈是很必要的。
Enable Spinning for IA32 Platforms
在IA32平台中启动Spinning


如果在一个多处理器系统中运行一个高负荷的有着激烈竞争锁应用,可以试着用spinning来改进性能。这个选项使在sleep之前旋转锁(译不好:This option enables the ability to spin the lock for a short time before going to sleep.)
Sun JDK

Sun在Windows IA32平台的JDK5.0中已经改变了默认的lock spinning行为。
在JDK5.0的发行版中,lock spinning默认是不可用的。在这个发行版中,BEA在用于weblogic server启动的环境脚本中显示的使spinning可用。使spinning可用用下面虚拟机选项:
-XX:+UseSpinning
(格式调整比较麻烦,好不容易调成了这样,大家见谅!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐