1.1编辑Weblogic Server启动脚本文件;
BEA_HOME/user_projects/domains/domain-name/startWebLogic.sh
BEA_HOME/user_projects/domains/domain-name/startManagedWebLogic.sh
set JAVA_OPTIONS=-Xms1024m –Xmx2048m
;
注:在
WebLogic
中,为了获得更好的性能,
BEA
公司推荐采用Jrockit JDK最小
Java
堆等于最大
Java
堆。
开发模式和产品模式的一些参数的默认值不同,可能会对性能造成影响,下面是对性能有影响的参数列表:
参数
|
开发模式默认值
|
产品模式默认值
|
Execute Queue: Thread Count
|
15 threads
|
25 threads
|
JDBC Connection Pool: MaxCapacity
|
15 connnections
|
25 connections
|
通过启动管理控制台,在域(如:
mydomain
)
>
配置
>
常规选择产品模式。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
调整选择启用本地
I/O
。
注:此值也可通过手动的修改
config.xml
配置文件。
4.1
修改默认执行线程数
在这里,执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好,应该恰到好处的去设置它,太小了,执行队列中将会积累很多待处理的任务,太大了,则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为
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 >
配置中修改线程计数。
4.2
设定执行队列的溢出条件;
Weblogic Server
提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能,当满足此溢出条件时,服务器改变其状态为“警告”状态,并且额外的再分配一些线程去处理在队列中的请求,而达到降低队列长度的目的。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
> Execute Queue > weblogic.kernel.Defalt >
配置下面几项:
队列长度:此值表示执行队列中可容纳的最大请求数,默认值是
65536
,最后不要手动改变此值。
队列长度阈值百分比:此值表示溢出条件,在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。
线程数增加:当检测到溢出条件时,将增加到执行队列中的线程数量。如果
CPU
和内存不是足够的高,尽量不要改变默认值“
0
”。因为
Weblogic
一旦增加后不会自动缩减,虽然最终可能确实起到了降低请求的作用,但在将来的运行中将影响程序的性能。
最大线程数:为了防止创建过多的线程数量,可以通过设定最大的线程数进行控制。
4.3
设定执行队列监测行为
Weblogic Server
能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作,也无法再执行新请求。如果执行队列中的所有执行线程都变为“阻塞”状态,
Weblogic server
可能改变状态为“警告”或“严重”状态。如果
Weblogic server
变为“严重”状态,可以通过
Node Manager
来自动关闭此服务器并重新启动它。具体请参考:
Node Manager Capabilities
文档。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
调整下可配置下面几项:
阻塞线程最长时间:在此服务器将线程诊断为阻塞线程之前,线程必须连续工作的时间长度
(
秒
)
。默认情况下,
WebLogic Server
认为线程在连续工作
600
秒后成为阻塞线程。
阻塞线程计时器间隔:
WebLogic Server
定期扫描线程以查看它们是否已经连续工作了
"
阻塞线程最长时间
"
字段中指定的时间长度的间隔时间
(
秒
)
。默认情况下,
WebLogic Server
将此时间间隔设置为
600
秒。
WebLogic Server
用
Accept Backlog
参数规定服务器向操作系统请求的队列大小,默认值为
50
。当系统重载负荷时
,
这个值可能过小
,
日志中报
Connection Refused,
导致有效连接请求遭到拒绝
,
此时可以提高
Accept Backlog 25%
直到连接拒绝错误消失。对于
Portal
类型的应用
,
默认值往往是不够的。
Login Timeout
和
SSL Login Timeout
参数表示普通连接和
SSL
连接的超时时间
,
如果客户连接被服务器中断或者
SSL
容量大
,
可以尝试增加该值。
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
调整下可配置“接受预备连接”。
标准的
Java
编译器是
javac
,但编译
JSP servlets
速度太慢,为了提高编译速度,可以使用
Jrockit
或
jikes
编译器取代
javac
编译器。下面说说更改
Java
编译器:
通过启动管理控制台,在域(如:
mydomain
)
>
服务器
> server
实例(如:
myserver
)
>
配置
>
常规下改变
Java
编译器
,默认为javac
。输入完整路径,如:
Jrockit/bin/javac.sh
。然后打开高级选项,在预规划到类路径填写
编译 Java
代码时为
Java
编译器类路径预规划的选项,如:BEA_HOME/
Jrockit
/jre/lib/rt.jar
。
7、使用Multi-pool技术Webogic Server集群提高性能;
与常规集群的配置方式不同,我们采用“Multi-pool”配置,配置为“负载均衡”方式
Bean
设为只读。
bean
只需在第一次被访问时从数据库获得数据,此后按照weblogic-ejb-jar.xml中参数read-timeout-seconds的设置(默认600S),bean将再次从数据库获得数据。
Bean
设为用于事务。
caching-between-transactions
设为Ture来启用数据的长期缓冲,避免在同一个Client依次执行多个访问该Bean的事务时,每启动一个事务就对该Bean执行ejbLoad()。
Bean
不作优化。此时,即使在交易中未被修改过,容器也会将存储操作优化掉
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
网站为准
:
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html
。我们按照前述的诊断
更换JDBC驱动程序,原来的系统上跑的JDBC TYPE 4 THIN ORACLE 9.2I驱动,现在更换为JDBC TYPE 4 THIN ORACLE 10G驱动。解决了weblogic 集群代理节点出现的负载不均衡问题。
设置
jsp-param pageCheckSeconds=-1
;
设置
serlet-reload-check=-1
或
ServletReloadCheckSecs=-1
;
设置
jsp-param precompile=true
,关闭
JSP
预编译选项。