[转]WebLogic Server 性能调优

上一篇 / 下一篇  2010-12-17 09:56:48 / 个人分类:weblogic

Confidential

WebLogicServer 性能调优 1——管理篇 Mingzi Wang BEA SE BSG

WebLogic Server性能及调整 硬件,操作系统,网络调整 JVM调整WebLogic Server调整

WebLogic Server application调整 WebLogic Server EJB调整

调优流程及典型故障点

--孤立"危险区域"

1.硬件,操作系统,网络调整

支持平台及性能评价

操作系统调整

网络调整

1)支持平台及性能评价

使用BEA声明支持的系统平台.

参照:

dev2dev Home > dev2dev WebLogic Platform. > WebLogic Platform. Supported Configurations > Supported Configurations > Supported Configurations

SPEC(Standard Performance Evaluation Corporation)的最新测试结果.

Fourth Quarter 2003 SPECjAppServer2002 Results

几条经验

数据库设置交换区

多机或多CPU能提高性能

多硬盘并行操作,提高读写磁盘效率

SPEC的最新测试结果

2)操作系统调整1

process and threads (HP-UX Platform)

max_thread_proc 64 1024

maxfiles 60 256

File Descriptor

set =4096

set rlim_fd_cur = 4096

TCP parameters

ndd -set /dev/tcp tcp_conn_request_max 1024

2)操作系统调整2

交换区(swap area)的大小.

交换区的大小一般在内存小于512M时,取内存的两倍,如果内存大于1G取与实际内存相等. 也可根据以下的公式来估算:

用户数*最大进程长度(512K)+大应用程序数*512KB

在系统持续出现某个错误时,需要重新分配系统资源.

首先,设法少量地增加资源.如问题仍存在,则以它初始值的50%至100%增加资源,问题或许能够得到解决.如,出现这些信息时:"I-node Table Overflow","no file"或"no more process"应增加NINDOE,NFILE,NPROC等参数的值.NINDOE定义Ⅰ节点活动表的大小,一般为100—400,最大为16000,NFILE定义系统文件活动表的大小,一般为100—600,最大为16000,NPROC定义系统允许的最大进程数,一般取值为50—3000.

磁盘的I/O操作可能是系统性能的一个瓶颈.

解决方法有:1选择适当的缓冲区数目(NBUF和NHBUF),NBUF定义系统中全部缓冲区的数量,一般为100—600,最大为65536,NHBUF定义系统的混合队列,最小为32,默认为256,最大为131072,一般与NBUF配套调整;2组织文件系统以减少磁盘访问次数等.增加NBUF和NHBUF的值到某一点,便可提高系统的性能.一般系统内存为4MB的系统大约可提供600K的空间给缓冲区.NHBUF的值为2的n次方,大约为NBUF的四分之一.

3)网络调整

网络硬件及软件

当若干网络组件存在问题时,协同网管来隔离及消除问题.

LAN架构的带宽和处理能力

保证Weblogic Server有足够的带宽来和架构中客户端或数据库等其他层次进行通讯,因此本地网必须有足够的处理应用高峰的能力.

网络性能的影响

2. JVM调整

JVM版本

堆大小和分代式垃圾收集机制

修改堆大小值

自动记载低内存状态

手动进行垃圾收集

设置JVM参数

1) JVM版本

JVM的认证版本:

dev2dev Home > dev2dev WebLogic Platform. > WebLogic Platform. Supported Configurations > Supported Configurations > Supported Configurations

不同JVM之间的性能差异

All SPEC JBB2000 Results Published by SPEC

2) 堆大小和分代垃圾收集机制1

调整堆大小的目的:提高客户的并发访问量同时减小垃圾收集的时间

分代式垃圾收集机制的目的:确定何时开始进行垃圾收集

从1.3 Java HotSpot JVM中使用该机制(调整参考).

使用详细垃圾收集来决定堆大小的步骤:

在最大负载情况下监控WebLogic Server的性能

使用-verbosegc 选项运行详细垃圾收集,并将输出结果重定向到文件中:

Windows和Solaris:

% java -ms32m -mx200m -verbosegc …>> logfile.txt 2>&1

对HPUX:

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

其中$$表示Java进程的进程ID.

2) 堆大小和分代垃圾收集机制2

分析以下数据点:

多长时间进行一次垃圾收集

一次垃圾收集花费多长时间.一次全面垃圾收集不应长于3~5秒.

每次垃圾收集后堆的效果如何.如果堆通常是85%为空,则应减小堆大小.

保证堆大小比实际系统剩余物理内存空间小.否则会发生换页延迟.

如果发现垃圾收集的时间太长,则应考虑减小堆大小.典型情况是应该分配给JVM80%的内存资源.

如果发现还有许多剩余内存资源,则在这台机器上可以起多个实例.

参考资料:

《The Java HotSpot Virtual Machine》

《Tuning Garbage Collection with the 1.3.1 Java TM Virtual Machine》

3) 修改堆大小值

配置堆大小的例子:

$ java -XX:NewSize=128m//设置新分代式堆大小.此值应是比1MB大的1024的倍数,并且是-XX:MaxNewSize的四分之一.如果存在大量短寿命对象,应增大此值,并同时增加CPU数目.

-XX:MaxNewSize=128m //设置最大新分代式堆大小.此值应是比1MB大的1024的倍数.

-XX:SurvivorRatio=8 //设置新堆大小的比率.通常设为8,然后监控系统.

-Xms512m //设置最小堆大小.此值应是比1MB大的1024的倍数.通常将此值与-Xmx设置相同.

-Xmx512m//设置最大堆大小.此值应是比1MB大的1024的倍数.通常将此值与-Xms设置相同.

-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

4) 自动记载低内存状态

如果平均可用内存小于最初可用内存的5% , weblogic server会把此情况写入日至.

设置方法:

在WebLogic Server中设置方法:

/console/中mydomain->Servers->myserver->Configuration->Tuning->Advanced Options->Memory Options

5) 手动进行垃圾收集

确保在手动垃圾收集之前进行了完全的自动垃圾收集

在WebLogic Server中设置方法:

/console/中mydomain->Servers->myserver->Monitoring —> Performance->Force garbage collection

实际这是调用了JVM的 System.gc() 方法.

6) 设置JVM参数1

JVM的命令行选项有助于提高JVM的性能.所有的JVM参数是跨平台的,但在不同平台上结果不同.因此对特定系统,应同时测试客户/服务器端的JVM.

Windows/UNIX平台上标准JVM参数

Windows平台:

-hotspot / -classic

UNIX平台:

-client or –hotspot / -client or -hotspot

Windows/UNIX平台上非标准JVM参数

Windows平台:

-Xnoclassgc//对特定类取消垃圾收集.这需要增大堆大小.

-Xrs//减少JVM对系统信号量的使用率.

UNIX平台:

-Xnoclassgc//对特定类取消垃圾收集.这需要增大堆大小.

-ss//设置本地线程栈大小.

6) 设置JVM参数2

Single CPU machines

Application characteristics:

Small heap sizes

Short-lived

Single user with few threads

Typically not I/O bound

VM spends most time translating and executing byte codes

Garbage collection pauses not a problem

Typical Client VMs

Typical Server VMs

Multi-processor servers

Application characteristics:

Large heap sizes

Long uptimes

Many threads doing short activities

High network & file I/O

VM needs to spend more time managing I/O, threads, & memory

Garbage collection pauses create a huge problem

CG = Code Generation

MM = Memory Management

TM = Thread Management

I/O

R = Reflection

3. webLogic server

使用性能包与性能监视

设置线程计数

将某些线程专用为Socket Readers

为溢出条件设执行队列

检测停滞队列

连接后备缓冲

设置weblogic server启动参数

设置java编译器

使用weblogic server集群

1) 使用性能包与性能监视

使用性能包

config.xml文件中表示该Server使用本地I/O.

Console:mydomain->Servers->myserver->Configuration->Tuning->"Enable Native IO" 中将此值设为True(默认为True).

如果选中,但本地操作系统没有可用的性能包,则WLS会自动使用非本地I/O

参考:特定平台的性能包说明

进行性能监视

2) 设置线程计数

原理:

每个新的server实例默认有一个队列weblogic.kernel.default用于存储对Web应用及RMI对象的请求.该队列默认被分配了15个线程.

设置原则:

增大机器的最大并发线程数使处理器利用率达到最大.对于服务器端操作比较多的线程,应该减少线程计数;对于客户端操作比较多的,应该增加线程计数.并发线程数理论上等于"本地主机CPU个数+Stuck线程数",够用即可,过大会降低系统性能.

观察方法:

console:mydomain->Servers->myserver->Monitoring->General->Monitor all Active Queues... ->weblogic.kernel.Default

修改方法:

console:mydomain->Servers->myserver ->Monitoring->Monitor all Active Queues... ->Configuration->default

config.xml:…

3) 将某些线程专用为Socket Readers

原理:

如果必须使用纯java的socket reader,可为每个Server实例和客户机配置一定数量socket reader线程.可设置执行线程中一部分专用于读取Socket.ThreadPoolPercentSocketReaders 属性用于设置在执行线程中专用做Socket Readers的百分比.因此对各种应用此值不同.

设置方法:

在WebLogic Server中设置方法:

console:mydomain->Servers->myserver->Configuration->Tuning->Socket Readers

在客户机中设置方法:

-Dweblogic.ThreadPoolSize=value

-Dweblogic.ThreadPoolPercentSocketReaders=value

4) 为溢出条件设执行队列

修改方法:

/console/中mydomain->Servers->myserver->Monitoring->General

5) 检测停滞队列

当执行队列中的线程停滞时会被weblogic自动检测.server会根据当前停滞线程的数目来诊断当前系统的健康状况.

如果默认队列中所有线程都停滞,服务器健康状况变为"危急".

如果weblogic.admin.HTTP, weblogic.admin.RMI或用户定义执行队列中线程都处于停滞,服务器状况变为"警告".

配置线程检测条件(这是以server为单位的配置,而非以执行队列为单位):

/console/中mydomain->Servers->myserver->Configuration->Tuning->Stuck Thread Max Time

线程连续工作多长时间,会被认为该线程被阻塞住.

/console/中mydomain->Servers->myserver->Configuration->Tuning->Stuck Thread Timer Interval

weblogic server周期性扫描所有执行队列线程的时间间隔.

6) 连接后备缓冲

config.xml文件中server元素的AcceptBacklog属性设定weblogic server实例能接受的最大连接数.

AcceptBacklog决定了在等待队列中最多可以有多少TCP连接等待处理.

设置方法:

/console/中mydomain->Servers->myserver->Configuration->Tuning->Accept Backlog

如果在许多客户端连接被拒绝,而在服务器端没有错误显示,说明该值设得过低.

如果连接时收到connection refused消息,说明应提高该值,每次增加25%

7) 设置WebLegic Server启动参数

设置WL_HOME\server\bin 中的startWLS.sh (UNIX) and startWLS.cmd (Windows)

将最大堆大小和最小堆大小设为一样:

"%JAVA_HOME%\bin\java" -hotspot -Xms512m -Xmx512m -classpath %CLASSPATH% -

8) 设置java编译器

设置方法:

/console/中mydomain->Servers->myserver->Configuration->General->Java Compiler:

填写java编译器的全路径.如c:\visualcafe31\bin\sj.exe

/console/中mydomain->Servers->myserver->Configuration->General->Advanced Options->Append to classpath

填写jre的全路径.如BEA_HOME\jdk131_03\jre\lib\rt.jar

weblogic.xml的元素jsp-descriptor的参数compileCommand定义了编译JSP和Servlet的编译器.

weblogic.xml的元素jsp-descriptor的参数precompile定义了weblogic启动时候预编译jsp的编译器.

启动weblogic server时可以用jvm的参数-compiler来指定不同的生成容器EJB类的编译器.

在UNIX上可以手动设置文件描述符的大小,例如:

set rlim_fd_max = 4096

set rlim_fd_cur = 1024

在UNIX上可以使用本地线程:jvm添加参数-native .

9) 使用WebLogic Server集群

用途:提高WeblogicServer的负载处理能力.包括规模化和可靠性.

特点:对应用开发者透明;使用IP多址广播方式;动态增加集群能力;冗余容错能力

使用集群的考虑:

网络需求:如果应用系统主要受网络瓶颈的约束,应首先考虑增加网络吞吐量,如更换为更快的网卡

磁盘的IO需要:如果应用系统主要受磁盘IO的约束,则应首先考虑提高磁盘转数或更换磁盘控制器

CPU需要:如果应用系统主要受CPU的约束,则使用多CPU的节点.BEA推荐每个实例使用2个CPU

4. WebLogic Server application调整

1)使用性能分析工具

2)JDBC应用调整

3)管理SESSION

4)使用执行队列来控制线程使用

1)使用性能分析工具

使用Jprobe

Sitraka公司

提供性能测试瓶颈,执行代码覆盖及其他测试.包括以下工具:

JProbe 3.0.x Integration Portal for J2EE

JProbe 4.0 Integration Portal for J2EE

使用OptimizeIt

Borland公司

在Solaris和Windows平台上的性能测试工具

Introscope

2)JDBC应用调整

应用设计决定了性能的损益

客户的数量和位置,DBMS中表和索引的大小和架构,队列的数量和类型.

为TYPE 4 MS SQL Driver的JDBC优化工具

当使用TYPE 4 MS SQL驱动,创建及执行SQL语句会更快

调整方法:

services->JDBC->Connection Pools->OraclePool->Maximum Capacity=50.对数据库的最大物理连接数.

services->JDBC->Connection Pools->OraclePool->Statement Cache Size=200.缓存保留的可被调用的表达式数.

3)管理SESSION

管理Bean持久

内存内复制比基于JDBC的Session状态持久快10倍.当使用基于JDBC持久,通过优化代码来提高Session状态的粒度.每次Session执行Put操作会导致向数据库的写入.增大每次Put的数据量而减小Put执行次数.

减小Session

调整性能的关键是配置Weblogic Server如何管理Session.

使用可测度的Session调用

节约Session使用

将频繁使用的值保存在本地变量中

在Session中尽量使用聚类对象,而非多个单独对象

4)使用执行队列来控制线程使用

优化重要应用的性能

可以将单独的重要应用使用单独的执行队列,保证有一定数量的执行线程.在服务器的峰值负载时,非重要的应用之间将竞争默认队列的线程,而重要应用会保证有一定数量的线程.

降低非重要应用的性能

对于潜在消耗大内存量的应用,将它分配到限制使用内存资源的执行队列,影响其他应用的队列.

修改死锁线程的使用

当所有执行线程被频繁执行时会发生死锁.例如Servlet从指定JMS消息队列读取消息时如果所有线程用于处理Servlet的请求,则会没有向队列传递消息的线程.恰当的方法是使用单独的执行队列来处理Servlet.避免Servlet和JMS间竞争线程资源.

5. WebLogic Server EJB调整

1)EJB的运行过程

1)设置weblogic-ejb-jar.xml中与性能相关测的参数

2)设置weblogic-cmp-rdbms-jar.xml中与性能相关测的参数

3)调整监控统计的响应

4)其他性能改善策略

1)EJB的运行过程

Bean设为只读.

bean只需在第一次被访问时从数据库获得数据,此后按照weblogic-ejb-jar.xml中参数read-timeout-seconds的设置(默认600S),bean将再次从数据库获得数据.

Bean 设为用于事务.

caching-between-transactions设为Ture来启用数据的长期缓冲,避免在同一个Client依次执行多个访问该Bean的事务时,每启动一个事务就对该Bean执行ejbLoad().

Bean不作优化.

此时,即使在交易中未被修改过,容器也会将存储操作优化掉.

2)设置weblogic-ejb-jar.xml中与性能相关测的参数

weblogic-ejb-jar.xml用于定义EJB的环境,缓冲,集群及行为.同是将可用的Weblogic Server资源映射到EJB上.包括JDBC联接池,JMS联接工厂,及其它所部署的EJB.

设置事务隔离级别

isolation-level

定义数据库锁

concurrency-strategy

为Stateful Session 和 Entity Beans设置缓冲大小

max-beans-in-cache

为Stateless Sessions Beans的起始状态调整池大小

initial-beans-in-free-pool

为Session和Message-Driven Beans设置EJB池大小

max-beans-in-free-pool

相关信息

元素

3)设置weblogic-cmp-rdbms-jar.xml中与性能相关测的参数

关联缓冲支持

通过将相关Bean载入缓冲及向相关Bean发出联接查询来避免多重查询,使关联缓冲支持提高了Entity Bean的性能.

Entity Beans的关联缓冲支持

relationship-caching

更多信息

元素

4)调整监控统计的响应1

缓冲缺失率

容器对缓冲中Bean访问缺失次数 / 总访问次数.如果被访问的Bean相对集中,则增大缓冲;如果不相对集中,则应测试出一个使该值相对小的缓冲值.

锁等待率

等待获得锁的对Bean访问的线程个数 / 对锁需求的总数.此值高说明对Bean访问.减少事务的持续时间并尽快释放资源,避免将大量工作合并到单一事务中.对于Bean来说一个高的锁定等待级别所表现的并发性不理想.如果应用允许的话,通过减少在EJB容器层的锁定,非最优的数据库访问策略能提供更好的资源并发访问性.

锁超时率

锁管理者超时的个数 / 所访问的锁管理者个数.对锁的超时设置过短会增大此值.但设置过长会导致事务失败时消耗时间过长.

池缺失率

访问池中Bean,而又不能获得的请求次数 / 对池中Bean的总访问次数.方法:检查Bean的损坏率以确定Bean没有被破坏.检查对Bean的需求量.如果破坏率不高应增大池大小.

4)调整监控统计的响应2

Bean损坏率

Bean的损坏个数 / 对Bean的请求数.BEA推荐不要在Bean代码中抛出非自定义异常.通过调查导致Bean损坏的异常来修改性能.

池超时率

等待池中Bean超时的请求个数 / 全部请求数.通过增大池大小来增加提供服务响应的Bean实例.事务超时值也会影响该值.

事务回滚率

回滚的事务个数 / 调用EJB的总事务数.通过事务超时率可以观察此值高低.如果此值高,应先检查事务超时问题.

事务超时率

超时的事务个数 / 总事务个数.事务超时值设置错误会导致此值高.服务器等瓶颈会导致此值高.可以通过跟踪事务来观察超时原因.

5)其他性能改善策略

组合缓冲支持

用于配置将多个Entity Bean使用一个缓冲.有助于可用性和性能问题.

批处理操作

对于在CMP Bean的一条SQL语句中执行多数据库操作,通过批处理进行增,删,改有助于提高CMP Bean的性能,减小网络负荷.

在Weblogic Server集群中分配访问EJB的事务

当一个事务使用多个EJB时,Weblogic Server尽量从一个Weblogic Server实例中获取EJB实例.这有助于为事务减小网络流量.

一个事务也可以在异构集群中使用多个Weblogic Server实例中的EJB.这时Weblogic Server使用多层连接来访问数据,而非对数据的多个直接连接.这种方法减少资源,提高事务性能.当然,最好使用同构集群.

6. 调优流程及典型故障点

JVM(虚拟机)数据

是否内存太少从而导致虚拟内存频繁交换

有多少任务处于挂起状态,系统的平均负荷是多少

Web服务器数据

在测试期间产生了多少http错误

有没有子线程被挂起

数据库

剩余多大空间

缓存命中率是多少

网络

什么IP在产生最多的请求

网络上是否有任何报警事件

Q

A

&

联系方式:

mingzi.wang@bea.com

The E-Commerce Transactions Company

www.bea.com

LAN架构

本地网必须有足够的处理应用高峰的能力.如果网络流量常常大于网络资源的承载能力,则:

重新设计网络

减少客户端数量

提高系统对网络负载的处理能力

网络性能的影响

对于普通JAVA客户端,每个客户端JVM都要和服务器建立SOCKET联接.因此Weblogic Server要比Web请求提高125~150%的处理能力.

检测Web服务器性能方法:大约每56kbps可以处理7-10个并发访问

使用网络性能检测工具来观察网络系统的负载,消除网络瓶颈.

以下参数均在Weblogic Console中设置.

Protocols->HTTP->Post Timeout=60.Server用于接收某个HTTP POST数据的等待超时值.

Protocols->HTTP->Duration=60.对非活动HTTP连接,Server在Duration秒后将其关闭.

右键点myserver,选"View Excute Queues"->Configuration->weblogic.kernel.Default->Thread Count=50.为对列weblogic.kernel.Default分配的线程数.


TAG:

 

评分:0

我来说两句

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 8908
  • 日志数: 21
  • 文件数: 4
  • 书签数: 11
  • 建立时间: 2009-12-02
  • 更新时间: 2013-09-05

RSS订阅

Open Toolbar