优化 WebLogic 服务器性能参数
WebLogic 配置文件(config.xml)包含了大量很直观的与性能有关的参数,能通过配置环境与应用程序得到很好的优化。基于系统的需要调整这些参数不仅能改善单个点的性能,而且能提高整个应用程序性能的可衡量性。
试着采用下列WebLogic配置方法,或许能使你的系统达到最佳状态:
一 修改运行队列线程数的值。在WebLogic 中队列元素的线程数等于同时占用运行队列的应用程序的数目。当任务加入一个WebLogic 实例,它就被放到执行队列中,然后分配给任务一个线程来运行。线程消耗资源,因此要小心处理这个属性——增加不需要的值,会降低性能。
二,如果可能,使用自带的性能包(NativeIOEnabled=true)。
三,使用特定的应用程序执行队列。
四,使用JDBC连接池时,修改下列属性:
n 驱动名称:使用小的驱动或者jDriver。
n 初始容量:设为与最大容量相同的值。
n 最大容量:其值至少应与线程数相同。
五,把连接池的大小设为与执行队列的线程数相同。
六,设置缓冲。
七,为Servlet和JSP使用多个执行队列。
八,改变JSP默认的Java编译器,javac 比jikes或sj要慢。
优化
WebLogic
提要:
n
为
WebLogic
启动设置
Java
参数。
n
设置与性能有关的配置参数。
n
调整开发与产品模式默认值。
n
使用
WebLogic
“自有的
IO
”性能包。
n
优化默认执行队列线程。
n
优化连接缓存。
n
如何提高
JDBC
连接池的性能。
n
设置
Java
编译器。
n
使用
WebLogic
集群提高性能。
n
监视
WebLogic
域。
一、为
WebLogic
启动设置
Java
参数
只要启动
WebLogic
,就必须指定
Java
参数,简单来说,通过
WebLogic.Server
域的命令行就可以完成,不过,由于这样启动的过程冗长并且易于出错,
BEA
公司推荐你把这个命令写进脚本里。为了简化这个过程,你可以修改样例脚本里的默认值,样例脚本是提供
WebLogic
启动服务器的。
如果你用配置向导创建你的域,
WebLogic
启动脚本(
startWebLogic.cmd
)放在
domain-name
目录里。默认情况下,这个目录是
BEA_HOME\user_projects\domain\domain-name
,
BEA_HOME
表示安装路径,
domain-name
是在配置模板中设置的域名称。
你需要在这个脚本中修改一些默认的
Java
参数值,使之适合你的应用环境和程序。在这个文件中主要的性能参数是
JAVA_HOME
和
Java
堆的大小。
n
设
JAVA_HOME
的值为
JDK
所在的位置,如:
set JAVA_HOME=C:\bea\jdk141_03
n
为得到高性能的吞吐量,把
Java
堆的最小值与最大值设为相等。如:
"%JAVA_HOME%\bin\java" -hotspot -Xms512m -Xmx512m -classpath %CLASSPATH% -
二、设置与性能有关的配置参数
在一个
WebLogic
域中,配置文件(
config.xml
)位于与管理服务器通信的机器里,提供
WebLogic MBean
的长期存储。管理服务器作为连接的中心点,为服务实例与系统管理工具提供服务。域也可以包括其他的
WebLogic
实例,称之为从服务,主要为应用程序提供服务。
当启动管理服务器是,首先读域配置文件,然后跳过建立在配置文件中管理
MBean
默认的属性值,每一次用系统管理工具(不管是命令行界面还是管理控制台)改变一个属性值,它都会被存到相应的管理
MBean
,并且写进配置文件。
下表列出了
config.xml
文件中影响服务器性能的参数。
元素
|
属性
|
控制台标签
|
备注
|
Server
|
NativeIOEnabled
|
Native IO Enabled
|
|
ExecuteQueue
|
ThreadCount
|
Thread Count
|
|
ExecuteQueue
|
QueueLength
QueueLengthThresholdPercent
ThreadsIncrease
ThreadsMaximum
ThreadPriority
|
Queue Length
Queue Length Threshold Percent
(队列长限度百分比)
Threads Increase
Threads Maximum
Thread Priority
|
|
Server
|
StuckThreadMaxTime
StuckThreadTimerInteral
|
Stuck Thread Max Time
(堵塞线程的最长时间)
Stuck Thread Timer Interval
(堵塞线程的时间间隔)
|
|
Server
|
ThreadPoolPercentSocketReaders
|
Socket Readers
|
|
Server
|
AcceptBacklog
|
Accept Backlog
(接受缓存数)
|
|
JDBCConnectionPool
|
InitialCapacity
MaxCapacity
|
Initial Capacity
Max Capacity
|
|
JDBCConnectionPool
|
StatementCacheSize
|
Statement Cache Size
(声明高速缓冲大小
)
|
|
三、调整开发模式与产品模式默认值
你可以指定域为开发环境或为产品环境。
WebLogic
会根据你指定的环境类型使用不同的默认值提供不同的服务。
下表列出了两种模式下的默认值
优化参数
|
开发模式
|
产品模式
|
Execute Queue:
ThreadCount
|
15 threads
|
25 threads
|
JDBC Connection Pool:
MaxCapacity
|
15 connections
|
25 connections
|
3
.
1
更改运行时模式
在创建了一个域后,按下列步骤可以更改域里所有服务的的运行时模式:
1
.为更改运行在一个
WebLogic
主机上的所有域的运行时模式,用文本编辑器打开
WL_HOME\common\bin\commEnv.cmd(Windows)
或者
WL_HOME\common\bin\commEnv.sh (UNIX)
,
WL_HOME
是安装
WebLogic
的路径。
为指定的域更改运行时模式,就用文本编辑器打开
domain-name
\StartWebLogic.cmd (Windows) or domain-name\StartWebLogic.sh (UNIX)
,
domain-name
为创建的域的目录。
2
.在这个脚本中,更改
PRODUCTION_MODE
的值,如果你要服务器运行在产品模式,指定其值为
TRUE
。
3
.重启所有的服务器。
3
.
2
两种模式的不同
下表列出了开发模式与产品模式几种关键项的区别:
功用名称
|
开发模式
|
产品模式
|
SSL
|
你可以使用
WebLogic
安全服务提供的验证数字证书。有这些证书,你开发的应用程序会在
SSL
保护的环境下运行。
|
如果你使用验证数字证书,会收到警告信息。
|
部署应用程序
|
WEBLOGIC
实例会自动部署和更新位于
domain_name/applications
目录下的应用程序(
domain_name
为域的名称)。
|
不能使用自动部署功能,必须使用
WebLogic
控制台或者
WebLogiceblogic Deployer
工具。
|
Log File Rotation
|
启动服务器后,服务器自动重命名本地日志文件为
server-name.log.n
,为了滞留的
session
,只要日志文件的达到
500kb
,日志文件就会滚转一次。
|
当日志文件达到
500kb
,就会滚转。
|
Execute Queues
|
默认的执行线程为
15
。
|
默认的执行线程为
25
。
|
JDBC Connection Pool Capacity
|
默认的容量为
15
。
|
默认的容量为
25
。
|
四、使用WebLogic“自有的IO”性能包
当你使用自有的性能包,测试基准就表明了主要性能的提高。性能包采用最优化的平台及多线程的
Socket
去提高服务器的性能。例如,本地
Socket
读的多线程有自己的执行队列而不需要借用默认的执行队列线程,这样可以让默认执行线程很从容去处理应用程序。
不过,如果你一定要用纯
Java socket
读在主机上运行,你仍然可以通过配置每个服务器实例和客户机中适当的
socket
读的线程数量,来提高
socket
通信的性能。
设置性能包的操作方法:
默认情况下,装载在
config.xml
中的是自有的性能包。为了验证这个设置,在配置文件中检查
NativeIOEnabled
属性是否设为“
true
”(
NativeIOEnabled=true
)。
你也可以通过管理控制台来验证,步骤如下:
1
,
启动管理服务器。
2
,
访问管理控制台。
3
,
展开左边面板的
Servers
节点,显示域服务。
4
,
点击你要配置的服务实例。
5
,
选择
Configuration
-
>Tuning tab
。
6
,
如果
Enable Native IO
复选框没有被选择,选中即可。
7
,
点击
Apply
。
8
,
重启服务器。
五、优化默认执行队列线程
默认情况下,一个新的
WebLogic
实例配置了一个开发模式执行队列,
weblogic.kernel.default,
它包含
15
个线程。另外,
WebLogic
提供了
2
个预配置队列:
n
weblogic.admin.HTTP
——只在管理服务器上才有,这个队列供与管理控制台的通信用,你不能再配置它。
n
weblogic.admin.RMI
——管理服务器和被管理服务器上都有这个队列,它是供管理的交通之用,也不能再配置它。
如果你不配置额外的执行队列,并且指定应用给这些队列,
web
应用程序和
RMI
对象就使用默认的队列
weblogic.kernel.default
。
注意;如果自带的执行包没有在你的平台上使用,你可能需要调整默认的执行队列线程数和担任
socket
读的线程的百分比,去实现最佳性能。
5
.
1
你应该更改默认的线程数吗
?
增加更多的线程到默认的执行队列并不意味着你能处理更多的工作。即使增加更多的线程,仍然被处理器的能力限制。因为线程消耗内存,所以增加线程数属性的值不必要的降低了性能。一个高的执行线程数导致更多的内存被占用并且增加了上下文转换程序,它也会降低性能。
线程数属性的值与应用程序处理的工作的类型关系密切。例如,如果你的客户应用程序比较小,通过远程调用处理的工作较多,这样,客户端会花费更多的时间连接,因此,与能完成大量客户端任务的客户应用程序相比,会需要更多的线程数。
如果你的工作不需要使用超过15个线程(开发模式默认)或者25个线程(产品模式默认),就不要改变这个属性的值。通常,如果你的应用程序访问数据库花很长时间才返回结果,与访问数据库很短时间就返回的应用程序比较,你会需要更多的执行线程。从后者来看,用少点的线程数可能提高性能。
5
.
2
需要修改默认线程数的情形
为了给执行队列决定一个理想的线程数,当队列中所有应用程序都运行在最大负荷的情况下,监视队列的吞吐量。增加线程数,重复负载测试,直到达到最佳的吞吐量。(在某些情况下,增加线程数将产生足够多的上下文转换程序,使得队列中的吞吐量开始减少。)
注意:
WebLogic
管理控制台显示的是所有服务器执行队列累积的吞吐量。为了得到这个值,后面将会介绍。
下表列出了在WebLogic 域中调整的线程及与CPU数量相关的情形,这些情况也假定WebLogic运行在最大负荷下,并且使用默认的执行队列满足所有的线程的请求。如果你配置了额外的执行队列并指派了应用程序到具体的队列,就需要依据一个个连接池得到结果。
如果…
|
结果
|
应该:
|
线程数<CPU的数量
|
线程数太少,如果:
CPU
正等着工作,但有工作被完成。
CPU
利用率不能达到100%。
|