1 了解性能的目标
用户数、请求数、允许的响应时间
CPU 、内存、网络等信息
2 调优操作系统
Solaris 调优
ndd –set /dev/tcp tcp_time_wait_interval 60000, 将socket 的关闭保持时间缩短为60 秒(默认为240 秒)
Solaris 2.7 之前,tcp_time_wait_interval 的命名是tcp_close_wait_interval
其它可用ndd –set 调整的参数
参数 | 建议值
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
可以编辑/etc/system 的参数设定
参数
| 建议值
|
|
|
|
|
|
|
Note: This should only be set for machines that have at least 4 GB RAM or higher. |
|
|
|
|
|
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 mtu 1500
也可参见ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html
Windows 调优(通常情况下,默认的设置是可用的)
参见www.microsoft.com/windows2000/techinfo/howitworks/communications/networkbasics/tcpip_implement.asp
3 优化数据库
总体考虑
数据库设计,包括跨磁盘负载分担、数据表的组织和尺寸、索引、日志等
磁盘I/O 优化,包括限制I/O 的次数,加大缓冲区等
控制Checkpoint 频率。有些数据库可以,如Oracle, 有些则不行,如SQL Server 7
Oracle 调优(8.1.7 版本)
服务进程数,检查的方法是SELECT name, value FROM v$parameter WHERE name = ’processes’;
共享池尺寸,检查池当前可用值的方法是SELECT * FROM v$sgastat WHERE name = ’free memory’ AND pool = ’shared pool’;
最大打开游标数,检查的方法是SELECT name, value FROM v$sysstat WHERE name LIKE ’opened cursor%’;
数据块尺寸,检查的方法是SELECT name, value FROM v$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.txt 2>&1
HP-UX, -Xverbosegc:file=/tmp/gc$$.out
BEA JRockit: -Xgcreport
通过日志时间戳,计算GC 的频度
观察GC 耗费的时间,不要超过5 秒
GC 后的堆可用内存不应增长过多
5 调整WebLogic Server 的参数
调整执行队列的线程数,线程数和单笔响应时间成正比
激活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 -dispatchPolicy CriticalAppQueue ...
在使用连接池时,InitialCapacity 和MaxCapacity 应一致,MaxCapacity 的取值应比线程数大
设定SQL 语句缓存
指派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>
调整Java 编译器
通过admin console ,Configuarion à General à Java Compiler 以及Configuration à General à Advanced Options à 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 ,可以减少实例化开销;对于entity bean ,用于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