WAS监控调优思路及工具汇总.docx
《WAS监控调优思路及工具汇总.docx》由会员分享,可在线阅读,更多相关《WAS监控调优思路及工具汇总.docx(14页珍藏版)》请在冰点文库上搜索。
WAS监控调优思路及工具汇总
WAS整理——侯泰浩
一、WAS是什么
IBMWAS的全称是IBMWebSphereApplicationServer,和Weblogic一样,是当前主流的AppServer(应用服务器)之一
1.1术语
WAS:
IBMWebsphereAplicationServer,中间件应用服务程序;
IHS:
IBMHTTPSERVER
DM:
DeploymentManager,WAS中的集群管理节点;
ND:
NodeAgent,WAS中的节点监听程序;
JVM:
JavaVirtualMachine,Java虚拟机;
GC:
GabageCollection,自动垃圾回收
1.2WASND集群基本概念及体系结构
WAS集群由一组应用服务器组成,每个服务器上部署了同样的应用程序。
通过集群可以实现可扩展性(服务更多客户,提高吞吐量),负载均衡(平衡负载资源,使资源得以有效利用),高可用性(提供故障恢复和补偿机制,在关键性业务中提供容错功能)。
下图是ND分布式环境的体系结构,包括单元、节点、服务器等基本概念。
WAS群集是为了实现集中管理和负载均衡同时可以实现故障转移,一个2节点的群集拓扑如下:
其中,DeploymentManager通过每个节点上的NodeAgent完成对AppServer的配置修改、应用发布以及启动和停止,实现集中管理。
如果安装多个IHS,并实现负载均衡和分发,可以使用防火墙的负载分发功能。
每个节点上的AppServer可以是多个的。
二、WAS基本参数配置
描述
参数
缺省值
设置原则
JVM堆栈
服务器>应用程序服务器>server1>Java虚拟机
无
最小值为总内存1/8,最大值为总内存1/2至3/4,建议256M-1500M
连接池
资源>JDBC提供程序>(JDBC提供程序名)>数据源>(数据源名)>连接池属性
最小连接数:
10
最大连接数:
50
通过TPV监控连接池的大小变化曲线设置
语句高速缓存
资源>JDBC提供程序>(JDBC提供程序名)>数据源>(数据源名)>WebSphereApplicationServer数据源属性>语句高速缓存大小
10
比如实际情况下CPU利用率很高,并且表明有瓶颈,performanceadvisors报警提示preparestatement缓存丢弃率较高,这说明默认的值(10)太小,需要增加该值大小以提高吞吐量。
JMS池
资源JMS提供程序缺省消息传递JMS激活规范激活规范名
最大批次大小:
无
最大并发端点数:
无
根据实际情况分析
Web容器线程池
服务器>应用程序服务器>(服务器名)>
线程池>WebContainer
最小大小:
10
最大大小:
50
通过TPV监控Web容器线程池最大值(在可接受的相应时间范围内),根据此值进行设置。
EJB缓存
服务器>应用程序服务器>(服务器名)>EJB告诉缓存设置>EJB缓存设置>高速缓存大小
高速缓存大小:
2053
清除时间间隔:
3000
比如通过TPV监控发现ejbStore()有很高的调用率并且CPU利用率很低,可以基于期望的最大的活动的EJB实例设置该值
servlet高速缓存
服务器->server1->web容器设置->web容器->启用servlet高速缓存
关闭
建议启用servlet高速缓存
三、WAS的调优思路
1
2
3
3.1基本思路
部署在WAS上的应用程序,其性能是由多个因素决定的。
例如网络、数据库、内存分配、WAS服务器的配置以及应用程序的设计。
对于一个标准的J2EE应用,一个请求到来时,往往需要经过多次转发:
网络>Web服务器Web容器>EJB容器>数据库。
而每一次转发,都可能造成请求处理的瓶颈,使得应用程序整体性能下降。
如果我们把每一次转发的待处理资源都看成一个队列,如下图:
待处理资源队列
对于WAS调优,要记住的一个基本原则就是,使得在队列中等待的请求的数量最小化。
在实践中我们发现,为了达到这个目的,最有效的配置方式就是使得队列成为一个“漏斗”。
也就是说,越靠近客户端的队列,其容量越大,而后面的队列,其容量要略小于或等于前面的队列。
3.2WAS主要的调优参数
3.2.1WAS服务器参数
WebServer的最大并发用户:
这个设置是在conf/httpd.conf这个文件里面配置的。
在Unix系统中,对应的属性是MaxClient;在Windows系统中,对应的属性是ThreadsPerChild。
WebContainer的最大、最小并发用户:
在管理控制台中点击应用程序服务器>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(GarbageCollection,自动垃圾回收):
一般来说,良好的GC状态需要保证相邻两次垃圾回收的平均间隔时间应当是单次垃圾回收所需时间的至少5-6倍。
GC的调优是通过在模拟压力的情况下不断调整最大最小heapsize来实现的。
HeapFragmentation(heap碎片):
heap碎片的问题在JVM中存在大对象的情况下尤为突出。
减少碎片的方法包括调整pCluster(-Xp)和kCluster(-Xk)参数。
3.2.3WebContainer(Web容器)
对WebContainer的调优是通过对WebContainer传输链中各个通道(TCP、HTTP、WebContainer)的参数调整进行的。
这些参数包括诸如ThreadPool的最大最小值,buffer大小,timeout时间的大小,keep-alive的值等等。
Web容器线程池要点就是:
“通常,对于每个服务器CPU,5至10个线程将会提供最佳吞吐量”(现在的一个cpu可以用核来代替)。
比如你的PcServer有2块CPU,每块CPU都是4核,那么你一个ApplicationServer可以设置的最小值和最大值可以分别为40、80。
但是一般考虑到能充分利用CPU和Memory,或者为不同的应用启用不同的applicationserver,一台PcServer上并不仅有这么一个appserver,而且还有别的进程在占用着CPU,所以默认的10到50(Linux系统上25个)是一个比较合适的值,当然更准确的值需要通过性能测试来确定。
在进行性能测试的时候,如果吞吐率不是很满意,或者在TPV中看到线程池占用一直是最大值,不要立刻就调大线程池的设置——往往吞吐率会更一步下降。
这时候要注意CPU占用率的情况、vmstat的r列值,特别是System状态占用率的情况,如果接近10%,甚至超过10%,那么可以肯定系统在进程切换上面消耗的资源太多了。
下调线程池的大小反而会提升吞吐率,而且会由于吞吐率的提升降低页面平均响应时间。
3.2.4DataSource
对DataSource的优化包括两个方面。
一是JDBCDriver的选取,尽可能应使用Type4的JDBCdriver,这种driver是纯java的,适用于client/server模式,并提供比type2和legacy/CLI的driver更好的性能。
另一方面是Database连接池的参数设置,主要包括最大和最小连接以及timeout的设置。
具体的设置于应用程序的特性和并发用户量相关,一般来说,可设置最小连接为1且最大连接为30,作为一个继续调优的起点。
ApplicationServer将在使用该数据源的每个应用程序服务器中创建连接池的单独实例。
例如:
如果运行包含三个服务器的集群,这三个服务器都使用 myDataSource,并且 myDataSource的“最大连接数”设置为10,那么可生成多达30个连接(3个服务器乘以10个连接)。
3.2.5其他
除了JVM,WebContainer和DataSource之外,WAS的性能调优还包括很多其他方面的内容,如JMS、EJB、Session、DynamicCache等等。
四、监控工具
4.1WAS自带的TPV
WAS中免费提供的Tivoli®PerformanceViewer(TPV)允许客户对关键资源(如JVM、Web容器和EJB容器以及远程连接池)进行监视。
显示从本地或远程应用服务器收集的PMI(PerformanceMonitoringInfrastructure)数据
摘要报告:
表格方式查看性能模块:
图形方式查看性能模块:
但是TPV有一些明显缺点:
4.2Java性能监测工具
Jprofiler/Jprobe:
JProfiler是一个全功能的Java剖析工具(profiler),专用于分析J2SE和J2EE应用程序。
JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存漏失(memoryleaks)、并解决执行绪的问题。
它让你得以对heapwalker作资源回收器的rootanalysis,可以轻易找出内存漏失;heap快照(snapshot)模式让未被参照(reference)的对象、稍微被参照的对象、或在终结(finalization)队列的对象都会被移除;整合精灵以便剖析浏览器的Java外挂功能。
JProbe是一个完全为Java设计的解析器,为servlet、JSP和EJB应用代码提供了强大的Java性能分析、内存纠错、代码覆盖及线程分析功能。
主要用于识别内存泄漏、智能化内存分析、垃圾回收分析等
用于JVM生成的信息的工具还包括有:
用于VerboseGC分析:
IBMMonitoringandDiagnosticToolsforJava-GarbageCollectionandMemoryVisualizer(GCMV):
一个详细的GC数据可视化器,用于分析并绘制所有IBM详细GC日志——Xtgc输出(并且可扩展到分析和绘制其他形式的输入)。
它提供了广泛的详细GC数据值的图形显示,并处理optthruput、optavgpause和genconGC模式。
它具有原始日志、表格式数据和图表视图,并且可以将数据保存到jpeg或.csv文件(用于导出到电子表格)。
请参阅IBMSupportAssistant中的完整描述。
输入:
verbosegc日志
输出:
图形表示形式、html、jpeg或csv文件
支持:
此工具由IBM提供支持,目前是用于其所在领域的主要工具。
IBMPatternModelingandAnalysisTool(PMAT)forJavaGarbageCollector:
分析IBM详细GC跟踪,分析Java堆使用情况,并基于Java堆使用情况的模式建模提供重要配置建议。
此工具先于上面的IBMMonitoringandDiagnosticToolsforJava-GarbageCollectionandMemoryVisualizer
(1),并提供了一个可能相当有用的不同透视图。
请参阅IBMSupportAssistant或alphaWorks中的完整描述。
输入:
verbosegc日志
输出:
verbosegc日志的图形或表格表示形式
其他功能:
关于JVM参数的一般建议
支持:
技术预览版,按原样提供。
DiagnosticToolforJavaGarbageCollector
通过读取详细垃圾回收的输出,并产生文本和图形可视化表示形式及相关统计信息,从而帮助检查运行在JVM下的应用程序的垃圾回收特征。
请参阅alphaWorks中的完整描述。
输入:
verbosegc
输出:
文本和图形可视化表示形式
支持:
按原样提供的工具。
用于Java转储/javacore:
IBMThreadandMonitorDumpAnalyzer(TMDA)
分析一个或多个Java线程转储或javacore,并诊断监视器锁和线程活动,以便确定挂起、死锁和资源争用或监视器瓶颈的根源。
请参阅IBMSupportAssistant或alphaWorks中的完整描述。
输入:
用于显示相关线程历史记录的单个或多个javacore
输出:
基于GUI的视图
其他信息:
关于Analysisofhangs,deadlocks,andresourcecontentionormonitorbottlenecksusingIBMThreadandMonitorDumpAnalyzerforJavaTechnology的网络广播
支持:
技术预览版,按原样提供,但是是该领域的主要工具。
ThreadAnalyzer
提供Java线程转储或javacore的分析,例如来自WebSphereApplicationServer的转储或javacore。
可以在不同的级别分析线程使用情况,从高级图形视图开始,然后深入到各个线程的详细记录。
如果线程转储中存在任何死锁,ThreadAnalyzer将检测并报告它们。
此工具先于上面的IBMThreadandMonitorDumpAnalyzer工具(4),但是其功能已集成到后者之中,后者正在成为该领域的主要工具。
请参阅IBMSupportAssistant中的完整描述。
输入:
Java线程转储/javacore
输出:
线程的图形视图、加载多个线程转储以显示线程历史记录的能力
支持:
技术预览版,按原样提供,但是是该领域的主要工具。
此工具可能会逐步淘汰;请尽可能使用IBMThreadandMonitorDumpAnalyzer。
用于线程:
IBMLockAnalyzerforJava
旨在对动态应用程序执行锁分析,以便突出具有可能影响性能的锁争用的线程。
此工具由两个包组成:
1.第一个包与平台相关,并提供到JVM的连接,以便收集有关正在运行的应用程序的锁统计信息。
这个包在运行时随同要监视的应用程序一起进行加载。
2.第二个包与平台无关,并提供了图形用户界面。
该图形用户界面连接到平台包,并提供所需的控制和分析以确定性能糟糕的锁。
请参阅alphaWorks中的完整描述。
输入:
从JVM收集的统计信息
输出:
锁的图形视图
支持:
按原样提供的工具。
用于堆转储:
MemoryDumpDiagnosticforJava(MDD4J)
分析正在运行WebSphereApplicationServer或任何其他独立Java应用程序的JVM中常见格式的内存转储(堆转储)。
内存转储分析旨在确定Java堆中可能是内存泄露根源的数据结构。
该分析还确定应用程序的Java堆占用空间的主要肇事者和它们的所属关系。
此工具能够分析从遇到OutOfMemoryError问题的生产环境应用程序服务器中获得的非常大的内存转储(将需要2GB或更多的RAM)。
MDD4J扩展了下面较旧的IBMHeapAnalyzer(8)的功能,尽管两个工具的用户界面完全不同。
请参阅IBMSupportAssistant中的完整描述。
输入:
来自虚拟机(JVM)的内存转储(堆转储)
输出:
交互式报告,其中显示主要的内存泄露可疑之处,以及有关这些泄露的详细信息。
其他功能:
操作单个转储。
有些版本提供了多个转储的比较分析。
支持:
此工具由IBM提供支持,目前是用于其所在领域的主要工具。
在本文编写之际,IBMSupportAssistant中的最新版本为Beta版。
HeapAnalyzer
HeapAnalyzer读取单个Java内存转储(堆转储),并使您能够浏览转储以查看其内容。
此工具是上面的MemoryDumpDiagnosticforJava(MDD4J)工具(7)的前身,后者现在包含前者的大多数功能。
当时,HeapAnalyzer中的原始树浏览功能比在MDD4J中更加灵活。
另一方面,HeapAnalyzer缺乏MDD4J中的某些更完善的泄露嫌疑检测算法,并且不支持多个转储的比较分析。
请参阅alphaWorks中的完整描述。
输入:
单个java堆转储
输出:
可疑对象的图形视图和堆浏览器
支持:
按原样提供的工具。
HeapRoots
HeapRoots读取Java堆转储文件并提供用于分析数据的命令。
这些命令对数据运行算法,或查询有关该数据的信息。
HeapRoots提供了命令行交互式界面,您可以在其中输入命令并获取结果。
请参阅alphaWorks中的完整描述。
输入:
堆转储文件
输出:
可疑对象的图形视图和堆浏览器
支持:
按原样提供的工具。
用于系统/核心转储:
IBMMonitoringandDiagnosticToolsforJava-DumpAnalyzer
一个可扩展的工具框架,它读取IBMJVM产生的系统转储或核心文件,并针对该转储运行各种各样的分析模块以诊断常见问题,或提供有关该JVM和当前运行在该JVM中的任何中间件或应用程序的内部状态的深入信息。
目前,提供了用于对诸如死锁、挂起、崩溃、内存情况等常见JVM问题执行基本分析功能的模块。
作为对该基本工具的补充,WebSphereApplicationiServerModulesforDumpAnalyzer提供了附加的模块,可显示JVM中的WebSphereApplicationServer运行时的一般状态,以及有关多个WebSphereApplicationServer子系统的详细信息。
请参阅IBMSupportAssistant中的完整描述。
输入:
由JVM附带的jextract工具进行预处理的格式化系统转储
输出:
显示一个报告,其中包含由指定的分析模块提取的信息,还包含有关潜在问题的观察结果的简短摘要,以及一个提供深入信息的详细信息部分。
其他功能:
提供交互式模式以手动检查转储的内容。
使得用户能够编写自己的新的专门分析模块并将模块添加到该工具。
支持:
此工具由IBM提供支持,目前是用于其所在领域的主要工具。
4.1内存监控
在WAS的TPV里面可以监控jvm内存的使用情况。
此外,可以通过GC日志观察Websphere的内存使用情况。
4.2日志监测工具
IBM的heap分析器HeapAnalyzer、GCCollector
4.3其他工具
1.Loadrunner
2.WASMON
3.SiteScope
4.WebSphereApplicationServerProgramming
5.IBMTivoliCompositeApplicationManager
6.IBMTivoli