部署在WAS上的J2EE应用程序,其性能是由多个因素决定的。例如网络、数据库、内存分配、WAS服务器的配置以及应用程序的设计。对于一个标准的J2EE应用,一个请求到来时,往往需要经过多次转发:网络> Web服务器Web容器 > EJB容器 >数据库。而每一次转发,都可能造成请求处理的瓶颈,使得应用程序整体性能下降。如果我们把每一次转发的待处理资源都看成一个队列,如图:
待处理资源队列
对于WAS调优,要记住的一个基本原则就是,使得在队列中等待的请求的数量最小化。在实践中我们发现,为了达到这个目的,最有效的配置方式就是使得队列成为一个“漏斗”。也就是说,越靠近客户端的队列,其容量越大,而后面的队列,其容量要略小于或等于前面的队列。按照这个原则,调优的基本步骤如下:
设置的是Web Server的最大并发用户:
- 这个设置是在conf/httpd.conf这个文件里面配置的。在Unix系统中,对应的属性是MaxClient;在Windows系统中,对应的属性是ThreadsPerChild。
设置Web Container的最大、最小并发用户:
- 在管理控制台中点击应用程序服务器 > server1 > 线程池>WebContainer,根据观察的性能情况和应用情况输入合适的最小、最大进程数。
对象请求代理(ORB)的线程池大小:
- 在管理控制台中点击应用程序服务器 > server1 > ORB 服务 >线程池,根据观察的性能情况和应用情况输入合适的最小、最大进程数。
设置数据库的连接池属性:
- JDBC 提供者 >数据库JDBC驱动名称 > 数据源 > 数据源名称> 连接池,根据观察的性能情况和应用情况输入合适的最小、最大连接数。
JVM堆参数设置的性能调优:
- 应用程序服务器 > server1 > 进程定义 > Java虚拟机,根据硬件物理内存和应用情况输入合适的初始堆大小、最大堆大小。
ORB参数调用方式的性能调优:
- 应用程序服务器 > server1 > ORB 服务>选中按引用传递。
关闭动态加载开关:
- 企业应用程序 > 应用名称 > 关闭启动类重新装入开关。
- 关闭会话序列化,应用程序服务器 > server1 > 会话管理 > 分布式环境设置 >分布式会话选择无即可。
这个调优的步骤只是涉及了利用WAS服务器参数的调整来优化应用程序的性能,实际上性能的好坏很大部分是取决于应用的设计。好的性能源自好的代码设计。一般说来,性能调优大概可以提高10%-40%效率,而糟糕的代码设计却会使得性能几倍的下降。