注:在下面做的介绍都是以
Weblogic8.1
为例的,其它版本的
Weblogic
可能会有些许不同。
1)
设置
JAVA
参数;
a)
编辑
Weblogic Server
启动脚本文件;
l
BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh on Unix)
l
BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix)
b)
编辑
set JAVA_OPTIONS
命令,如:
set JAVA_OPTIONS=-Xms 256m �CXmx 256m
;
c)
保存,重启即可。
注:在
WebLogic
中,为了获得更好的性能,
BEA
公司推荐最小
Java
堆等于最大
Java
堆。
2)
开发模式
vs.
产品模式;
开发模式和产品模式的一些参数的默认值不同,可能会对性能造成影响,下面是对性能有影响的参数列表:
参数
|
开发模式默认值
|
产品模式默认值
|
Execute Queue: Thread Count
|
15 threads
|
25 threads
|
JDBC Connection Pool: MaxCapacity
|
15 connnections
|
25 connections
|
通过启动管理控制台,在域(如:
mydomain
)
>
配置
>
常规选择产品模式。
3)
尽量开启本地
I/O
;
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
调整选择启用本地
I/O
。
注:此值也可通过手动的修改
config.xml
配置文件。
4)
调优执行队列线程;
a)
修改默认执行线程数
在这里,执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好,应该恰到好处的去设置它,太小了,执行队列中将会积累很多待处理的任务,太大了,则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为
25
个执行线程。
为了设置理想的执行队列的线程数,我们可以启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
监视
>
性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数,据此确定理想的数值。
理想的默认执行线程数是由多方面的因素决定的,比如机器
CPU
性能、总体体系架构、
I/O
、操作系统的进程调度机制、
JVM
的线程调度机制。随着
CPU
个数的增加,
WebLogic
可以近乎线性地提高线程数。线程数越多,花费在线程切换的时间也就越多;线程数越小,
CPU
可能无法得到充分的利用。为获取一个理想的线程数,需要经过反复的测试。在测试中,可以以
25*CPU
个数为基准进行调整。当空闲线程较少,
CPU
利用率较低时,可以适当增加线程数的大小(每五个递增)。对于
PC Server
和
Windows 2000
,则最好每个
CPU
小于
50
个线程,以
CPU
利用率为
90%
左右为最佳。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
> Execute Queue > weblogic.kernel.Defalt >
配置中修改线程计数。
b)
设定执行队列的溢出条件;
Weblogic Server
提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能,当满足此溢出条件时,服务器改变其状态为“警告”状态,并且额外的再分配一些线程去处理在队列中的请求,而达到降低队列长度的目的。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
> Execute Queue > weblogic.kernel.Defalt >
配置下面几项:
l
队列长度:此值表示执行队列中可容纳的最大请求数,默认值是
65536
,最后不要手动改变此值。
l
队列长度阈值百分比:此值表示溢出条件,
在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。
l
线程数增加:当检测到溢出条件时,将增加到执行队列中的线程数量。如果CPU
和内存不是足够的高,尽量不要改变默认值“0
”。因为Weblogic
一旦增加后不会自动缩减,虽然最终可能确实起到了降低请求的作用,但在将来的运行中将影响程序的性能。
l
最大线程数:为了防止创建过多的线程数量,可以通过设定最大的线程数进行控制。
在实际的应用场景中,应根据具体情况适当的调整以上参数。
c)
设定执行队列监测行为
Weblogic Server
能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作,也无法再执行新请求。如果执行队列中的所有执行线程都变为“阻塞”状态,
Weblogic server
可能改变状态为“警告”或“严重”状态。如果
Weblogic server
变为“严重”状态,可以通过
Node Manager
来自动关闭此服务器并重新启动它。具体请参考:
Node Manager Capabilities
文档。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
调整下可配置下面几项:
l
阻塞线程最长时间:
在此服务器将线程诊断为阻塞线程之前,线程必须连续工作的时间长度(
秒)
。默认情况下,WebLogic Server
认为线程在连续工作 600
秒后成为阻塞线程。
l
阻塞线程计时器间隔:
WebLogic Server
定期扫描线程以查看它们是否已经连续工作了 "
阻塞线程最长时间"
字段中指定的时间长度的间隔时间(
秒)
。默认情况下,WebLogic Server
将此时间间隔设置为 600
秒。
5)
调优
TCP
连接缓存数;
WebLogic Server
用Accept Backlog
参数规定服务器向操作系统请求的队列大小,默认值为50
。当系统重载负荷时,
这个值可能过小,
日志中报Connection Refused,
导致有效连接请求遭到拒绝,
此时可以提高Accept Backlog 25%
直到连接拒绝错误消失。对于Portal
类型的应用,
默认值往往是不够的。Login Timeout
和SSL Login Timeout
参数表示普通连接和SSL
连接的超时时间,
如果客户连接被服务器中断或者SSL
容量大,
可以尝试增加该值。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
调整下可配置“接受预备连接”。
6)
改变Java
编译器;
标准的Java
编译器是javac
,但编译JSP servlets
速度太慢,为了提高编译速度,可以使用sj
或jikes
编译器取代javac
编译器。下面说说更改Java
编译器:
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
常规下改变
Java
编译器,默认为
javac
。输入完整路径,如:
c:\visualcafe31\bin\sj.exe
。然后打开高级选项,在预规划到类路径填写
编译
Java
代码时为 Java
编译器类路径预规划的选项,如:
BEA_HOME\jdk141_02\jre\lib\rt.jar
。
7)
使用
Webogic Server
集群提高性能;
具体关于如何配置Weblogic
集群,我就不细说了。详情可参考:
Introduction to WebLogic Server Clustering
。
8) Weblogic EJB
调优
由于
EJB2.0
已经很少项目在用了,
EJB3.0
再成熟一点,我再补充这一部分吧!
9) JDBC
应用调优
JDBC Connection Pool
的调优受制于WebLogic Server
线程数的设置和数据库进程数,
游标的大小。通常我们在一个线程中使用一个连接,
所以连接数并不是越多越好,
为避免两边的资源消耗,建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,
将最小值和最大值设为一致。
增加Statement Cache Size
对于大量使用PreparedStatement
对象的应用程序很有帮助,WebLogic
能够为每一个连接缓存这些对象,
此值默认为10
。在保证数据库游标大小足够的前提下,
可以根据需要提高Statement Cache Size
。比如当你设置连接数为25,Cache Size
为10
时,
数据库可能需要打开25*10=250
个游标。不幸的是,
当遇到与PreparedStatement Cache
有关的应用程序错误时,
你需要将Cache Size
设置为0
。
尽管JDBC Connection Pool
提供了很多高级参数,
在开发模式下比较有用,
但大部分在生产环境下不需调整。这里建议最好不要设置测试表,
同时Test Reserved Connections
和Test Released Connections
也无需勾上。
当然如果你的数据库不稳定,
时断时续,
你就可能需要上述的参数打开。
最后提一下驱动程序类型的选择,
以Oracle
为例,Oracle
提供thin
驱动和oci
驱动,
从性能上来讲,oci
驱动强于thin
驱动,
特别是大数据量的操作。但在简单的数据库操作中,
性能相差不大,
随着thin
驱动的不断改进,
这一弱势将得到弥补。而thin
驱动的移植性明显强于oci
驱动。所以在通常情况下建议使用thin
驱动。而最新驱动器由于WebLogic server/bin
目录下的类包可能不是最新的,
请以Oracle
网站为准: [url]http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html[/url]
。
10) JSP
调优
l
设置jsp-param pageCheckSeconds=-1
;
l
设置serlet-reload-check=-1
或ServletReloadCheckSecs=-1
;
l
设置jsp-param precompile=true
,关闭JSP
预编译选项。