WAS整理——侯泰浩
一、WAS是什么
IBM WAS的全称是IBM WebSphere Application Server,和Weblogic一样,是当前主流的 App Server (应用服务器)之一
1.1术语
WAS: IBM Websphere Aplication Server, 中间件应用服务程序;
IHS: IBM HTTP SERVER
DM: Deployment Manager, WAS中的集管理节点;
ND: NodeAgent, WAS中的节点监听程序;
JVM: Java Virtual Machine, Java虚拟机;
GC: Gabage Collection, 自动垃圾回收
jvm调优参数1.2W AS ND集基本概念及体系结构
WAS集由一组应用服务器组成,每个服务器上部署了同样的应用程序。通过集可以实现可扩展性(服务更多客户,提高吞吐量),负载均衡(平衡负载资源,使资源得以有效利用),高可用性(提供故障恢复和补偿机制,在关键性业务中提供容错功能)。
下图是ND分布式环境的体系结构,包括单元、节点、服务器等基本概念。
WAS集是为了实现集中管理和负载均衡同时可以实现故障转移,一个2节点的集拓扑如下:
其中,DeploymentManager通过每个节点上的NodeAgent完成对AppServer的配置修改、应用发布以及启动和停止,实现集中管理。
如果安装多个IHS,并实现负载均衡和分发,可以使用防火墙的负载分发功能。
每个节点上的AppServer可以是多个的。
二、WAS基本参数配置
三、WAS的调优思路
3.1基本思路
部署在WAS上的应用程序,其性能是由多个因素决定的。例如网络、数据库、内存分配、WAS服务器的配置以及应用程序的设计。对于一个标准的 J2EE应用,一个请求到来时,往往需要经过多次转发:网络 > Web服务器Web容器 > EJB容器 > 数据库。而每一次转发,都可能造成请求处理的瓶颈,使得应用程序整体性能下降。如果我们把每一次转发的待处理资源都看成一个队列,如下图:
待处理资源队列
对于WAS调优,要记住的一个基本原则就是,使得在队列中等待的请求的数量最小化。在实践中我们发现,为了达到这个目的,最有效的配置方式就是使得队列成为一个“漏斗”。也就是说,越靠
近客户端的队列,其容量越大,而后面的队列,其容量要略小于或等于前面的队列。
3.2WAS主要的调优参数
3.2.1WAS服务器参数
Web Server的最大并发用户:
这个设置是在f这个文件里面配置的。在Unix系统中,对应的属性是MaxClient;在Windows系统中,对应的属性是ThreadsPerChild。
Web Container的最大、最小并发用户:
在管理控制台中点击应用程序服务器 > server1 > 线程池 >WebContainer,根据观察的性能情况和应用情况输入合适的最小、最大进程数。
对象请求代理(ORB)的线程池大小:
在管理控制台中点击应用程序服务器 > server1 > ORB 服务 > 线程池,根据观察的性能情况和应用情况输入合适的最小、最大进程数。
设置数据库的连接池属性:
JDBC 提供者 >数据库JDBC驱动名称 > 数据源 > 数据源名称> 连接池,根据观察的性能情况和应用情况输入合适的最小、最大连接数。
JVM堆参数设置的性能调优:
应用程序服务器 > server1 > 进程定义 > Java 虚拟机,根据硬件物理内存和应用情况输入合适的初始堆大小、最大堆大小。
ORB参数调用方式的性能调优:
应用程序服务器 > server1 > ORB 服务>选中按引用传递。
关闭动态加载开关:
企业应用程序 > 应用名称 > 关闭启动类重新装入开关。
关闭会话序列化,应用程序服务器 > server1 > 会话管理 > 分布式环境设置 > 分布式会话选择无即可。
3.2.2JVM的参数
WAS 在HP和 Solaris 上使用的是 Sun提供的JVM,在其他平台使用的是IBM自己的JVM,建议使用WAS自带的JVM,因为在产品支持等方面会获得更多地优势
Heapsize(-Xms 和-Xmx):
heapsize的大小依赖于系统平台和具体的应用等多种因素。最大 heapsize需要小于机器的物理内存,一般来说,设置最大 heapsize 为 512m 是一个常见的起点。同时,在生产环境中,最好将 Xms 设置为小于 Xmx的值。
GC(Garbage Collection,自动垃圾回收):
一般来说,良好的 GC状态需要保证相邻两次垃圾回收的平均间隔时间应当是单次垃圾回收所需时间的至少 5-6倍。GC的调优是通过在模拟压力的情况下不断调整最大最小 heapsize 来实现的。
Heap Fragmentation (heap碎片):
heap 碎片的问题在 JVM 中存在大对象的情况下尤为突出。减少碎片的方法包括调整 pCluster (-Xp)和 kCluster(-Xk)参数。
3.2.3Web Container (Web容器)
对 Web Container 的调优是通过对 Web Container 传输链中各个通道(TCP、HTTP、WebContainer)的参数调整进行的。这些参数包括诸如 ThreadPool 的最大最小值,buffer大小, timeout 时间的大小, keep-alive 的值等等。
Web容器线程池要点就是:“通常,对于每个服务器 CPU,5 至 10 个线程将会提供最佳吞吐量”(现在的一个cpu可以用核来代替)。比如你的Pc Server有2块CPU,每块CPU都是4核,那么你一个Application Server可以设置的最小值和最大值可以分别为40、80。但是一般考虑到能充分利用CPU和Memory,或者为不同的应用启用不同的 application server,一台Pc Server上并不仅有这么一个appserver,而且还有别的进程在占用着CPU,所以默认的10到50(Linux 系统上 25 个)是一个比较合适的值,当然更准确的值需要通过性能测试来确定。在进行性能测试的时候,如果吞吐率不是很满意,或者在TPV中看到线程池占用一直是最大值,不要立刻就调大线程池的设置——往往吞吐率会更一步下降。这时候要注意CPU占用率的情况、vmstat的r列值,特别是System状态占用率的情况,如果接近10%,甚至超过10%,那么可以肯定系统在进程切换上面消耗的资源太多了。下调线程池的大小反而会提升吞吐率,而且会由于吞吐率的提升降低页面平均响应时间。
3.2.4Data Source
对 Data Source的优化包括两个方面。一是 JDBC Driver 的选取,尽可能应使用 Type 4 的JDBC driver,这种 driver 是纯java的,适用于 client/server 模式,并提供比 type2 和legacy/CLI 的