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