WebLogic Server 8.1 Performance Tuning Guide
1 了解性能的目标用户数、请求数、允许的响应时间
CPU、内存、网络等信息
2 调优操作系统
Solaris调优
ndd –set /dev/tcp tcp_time_wait_interval60000,将socket的关闭保持时间缩短为60秒(默认为240秒)
Solaris 2.7之前,tcp_time_wait_interval的命名是tcp_close_wait_interval
其它可用ndd –set调整的参数
参数建议值 /dev/tcptcp_time_wait_interval
60000
/dev/tcptcp_conn_req_max_q
16384
/dev/tcptcp_conn_req_max_q0
16384
/dev/tcptcp_ip_abort_interval
60000
/dev/tcptcp_keepalive_interval
7200000
/dev/tcptcp_rexmit_interval_initial
4000
/dev/tcptcp_rexmit_interval_max
10000
/dev/tcptcp_rexmit_interval_min
3000
/dev/tcptcp_smallest_anon_port
32768
/dev/tcp tcp_xmit_hiwat
131072
/dev/tcp tcp_recv_hiwat
131072
/dev/tcp tcp_naglim_def
1
/dev/ce instance
0
/dev/ce rx_intr_time
32
可以编辑/etc/system的参数设定
参数建议值 set rlim_fd_cur
8192
set rlim_fd_max
8192
settcp:tcp_conn_hash_size
32768
set shmsys:shminfo_shmmax
Note:Thisshould only be set for machines that have at least 4 GB RAM orhigher.
4294967295
set autoup
900
set tune_t_fsflushr
1
Solaris 8参考docs.sun.com/db/doc/816-0607
Solaris 9参考docs.sun.com/db/doc/806-7009
HP-UX调优
参见docs.hp.com/hpux/onlinedocs/TKP-90203/TKP-90203.html
Java性能调整参见h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1602,00.html
AIX调优
参见publib16.boulder.ibm.com/pseries/en_US/aixbman/prftungd/prftungd02.htm
Linux调优
可以调整一下mtu, /sbin/ifconfig lo mtu1500
也可参见ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html
Windows调优(通常情况下,默认的设置是可用的)
参见www.microsoft.com/windows2000/techinfo/howitworks/communications/networkbasics/tcpip_implement.asp
或www.microsoft.com/technet/treeview/default.asp?url=/TechNet/prodtechnol/windows2000serv/maintain/optimize/perftune.asp
3 优化数据库
总体考虑
数据库设计,包括跨磁盘负载分担、数据表的组织和尺寸、索引、日志等
磁盘I/O优化,包括限制I/O的次数,加大缓冲区等
控制Checkpoint频率。有些数据库可以,如Oracle,有些则不行,如SQL Server7
Oracle调优(8.1.7版本)
服务进程数,检查的方法是SELECT name, value FROMv$parameter WHERE name = ’processes’;
共享池尺寸,检查池当前可用值的方法是SELECT * FROM v$sgastatWHERE name = ’free memory’ AND pool = ’shared pool’;
最大打开游标数,检查的方法是SELECT name, value FROMv$sysstat WHERE name LIKE ’opened cursor%’;
数据块尺寸,检查的方法是SELECT name, value FROMv$parameter WHERE name = ’db_block_size’;
SQL Server调优
将tempdb定位在快速I/O设备上
如果性能监视显示I/O频率加快,可以加大恢复间隔时间
采用2KB以上的数据块尺寸
Sybase调优
适当加大恢复间隔时间
采用2KB以上的数据块尺寸
4 确定Java虚拟机的设置
Sun JDK
-server, -client, -Xms, -Xmx, -XX:NewSize,-XX:MaxNewSize, -XX:SurvivorRatio, -XX:+UseISM,-XX:+AggressiveHeap
Sun JVM的其它参数见java.sun.com/docs/hotspot/VMOptions.html
JRockit JDK
-Xms, -Xmx, -Xns, -Xgc:parallel,-Xxenablefatspin
堆取值是系统剩余内存的80%
–XX:NewSize,-XX:MaxNewSize为堆大小的1/4,多CPU环境下适量增大
–XX:SurvivorRatio可设置成8
不要在benchmark期生成GC,观察GC的方法
Windows, Solaris: … -verbosegc …>> log.txt2>&1
HP-UX,-Xverbosegc:file=/tmp/gc$$.out
BEA JRockit: -Xgcreport
通过日志时间戳,计算GC的频度
观察GC耗费的时间,不要超过5秒
GC后的堆可用内存不应增长过多
5 调整WebLogicServer的参数
调整执行队列的线程数,线程数和单笔响应时间成正比
激活native pack
调整backlog buffer
TCP层可保持的最大的连接数,默认值50
如果客户机无法连接WebLogic Server,可以调整取值
定制执行队列,指派servlets、JSPs、EJBs到执行队列
保证关键应用高性能的运转
限制非关键应用可占用的资源
防止死锁的发生
JSP, servlet范例(web.xml)
<servlet>
<servlet-name>MainServlet</servlet-name>
<jsp-file>/myapplication/critical.jsp</jsp-file>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>CriticalAppQueue</param-value>
</init-param>
</servlet>
EJB范例(weblogic-ejb-jar.xml)
<weblogic-enterprise-bean>
<ejb-name>…</ejb-name>
<dispatch-policy>CriticalAppQueue</dispatch-policy>
</weblogic-enterprise-bean>
RMI对象范例
java weblogic.rmic -dispatchPolicyCriticalAppQueue ...
在使用连接池时,InitialCapacity和MaxCapacity应一致,MaxCapacity的取值应比线程数大
设定SQL语句缓存
指派Application-LevelCaching,范例(weblogic-application.xml)
<weblogic-application>
<ejb>
<entity-cache>
<entity-cache-name>large_account</entity-cache-name>
<max-cache-size>
<megabytes>1</megabytes>
</max-cache-size>
</entity-cache>
</ejb>
</weblogic-application>
调整Java编译器
通过adminconsole,Configuarionà Generalà JavaCompiler以及ConfigurationàGeneralà AdvancedOptionsà Append to classpath
通过weblogic.xml的jsp-descriptor参数,compileCommand和precompile
6监控磁盘和CPU的使用情况,包括应用服务器和数据库服务器
Solaris和Linux
disk, iostat –D<interval>
CPU, iostat<interval>
Windows
perfmon
如果数据库CPU利用率过高,考虑索引的设计;如果磁盘利用率为100%,可考虑更快的磁盘或RAID
WebLogic Server的I/O瓶颈
JMS file store写操作,事务日志,HTTP日志,服务器日志
试用禁止同步的JMS写操作、加大HTTP日志缓冲区等方法
7 监控网络上的数据传输
确定客户机与服务器、服务器与数据库之间的传输数据量
使用命令netstat –s –P tcp,查看是否有retransmission的发生
8 检查频繁的标准输出或日志
减少日志操作,关闭System.out.println语句
9 定位应用的瓶颈
如果磁盘和网络不是瓶颈,服务器的CPU利用率又较低,则可能存在锁冲突
使用JProbe或OptimizeIt探测系统瓶颈
服务器CPU利用率达到100%后,可继续使用JProbe或OptimizeIt调优
10调整应用
EJB
weblogic-ejb-jar.xml描述
Initial-beans-in-free-pool
默认值0
Max-beans-in-cache
面向stateful session bean和entity bean,影响活跃和钝化
Max-beans-in-free-pool
对于session bean和MDB,可以减少实例化开销;对于entitybean,用于finder和home方法。一般不需要修改,默认值1000
监控EJB, Pool Miss Ratio, Destroyed Bean Ratio,Transaction Rollback Ratio, Transaction Timeout Ratio等
JSP和servlet
关闭JSP页面检查和servlet重加载
使用基于内存的session持久策略
预编译JSP
JMS
不要使用JMS message selectors
使用异步的方式(onMessage)接收消息
参见dev2dev.bea.com/products/wlserver/whitepapers/WL_JMS_Perform_GD.jsp
Session管理
Session影响性能
客户机cookie值得考虑
使用本地变量保持对象
聚合对象,然后放入session
页:
[1]