IBM WAS的几个性能分析工具

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.heapdump分析工具

ha439.jar

2.javacore分析工具

jca437.jar

3.native_stderr分析工具

ga439.jar

其中,在使用的时候,日志文件较大的话,要使用java -jar -Xmx参数增大最大内存值。在分析native_stderr日志,即GC信息分析的时候工具可能出现日期时间数据不能解析的异常,这时你要试着替换检查一下日志文件中的日期时间格式,我记得是要增加或减少一个空格。(以前遇到过这个问题,GOOGLE全球都没发现有人给个答案,结果自己把它试出来了)

调用方式

在cmd下运行命令:

java -Xmx768m -jar ha439.jar

java -Xmx512m -jar jca437.jar

Websphere性能优化——面向切面分析Javacore

一般情况下,我们会通过调整参数来提高系统性能,如线程池大小、连接池大小或者ORB 池等,也可以利用IHS实现静态文件分离,以上方式都是通过配置调整,利用并行或压力分离等方式实现对系统的优化。我们还可以更换运算率更高的服务器,或者增加更多的物理服务器,通过硬件角度扩展达到性能调优的目的,但这种硬件扩容调优方式会使得项目的成本费用会大大增加,且优化成效还不一定能达到期待值。当然,在以数据库操作为主的业务系统还可以调整数据库的参数,例如内存占用比率,增加命中,缓冲等的优化。

但以上这些优化方式都是从系统周边环境的角度进行考虑的,如果我们不了解我们的业务应用代码在JVM中是如何运行的,又或者各执行的请求是如何进行处理的,其处理的过程及处理步骤处于什么状态下,就盲目开展优化工作,就有了点瞎子过河——摸不着边的意思了。

因此,尽可能收集更多的信息,会让我们的优化工作事半功倍!

除了自己实现线程请求监控记录外,我们还可以通过Javacore文件来进行线程转储。通过采集和分析Javacore,了解JVM的运行情况,可以使我们更清晰地了解系统的整体运行情况,帮助我们判断系统是否运行正常,或是在繁忙时存在哪些隐患。

一、什么是Javacore?

Javacore是Java应用程序在某一时间的文本表示形式,也可理解为Java Dump(通常称为Thread Dump)的线程转储文件。该文件记录了整个JVM的运行情况,包含线程、垃圾回收、JVM运行参数、内存地址等信息。JVM的许多问题都可以用这个文件进行诊断,其中比较典型的包括线程阻塞、CPU使用率过高、JVM Crash、堆内存不足和类装载等问题。

Javacore文件通常以*.txt方式显示,名称格式主要是以Javacore 为头,加上日期号、产生的时间号、当时的线程编号,如: Javacore.2 0100719.003424.299228.txt.

我们可以通过以下几种方式获取Javacore:

1. 向操作系统发送一个中止的signal

∙∙AIX和Linux:SIGQUIT,kill -3 PID

∙∙Windows:CTRL+Break,DrAdmin in WAS环境

2. 在Java的执行代码中使用JavaDump()方法

com.ibm.jvm.Dump.JavaDump()方法促使JVM dump

发布ProblemDiagnosticsLabToolkit应用包,通过可视化页面直接生成相关文件。

3. 系统在异常时自动抛出

∙∙一个严重的本地调用出错(非Java的异常)

∙∙JVM堆的大小被使用完了

∙ ∙ ∙∙OutOfMemory 错误

二、Javacore描述了什么内容?

在Javacore文件的帮助下,我们就可以更好地分析系统运行情况,在系统出现死锁,或者内部错误、中间件等问题时,我们都可以通过J avacore进一步深入分析。我们可以在Javacore文件里找到以下相关信息:

∙∙JVM的参数启动参数、Jdk版本

∙∙JVM堆大小

∙∙JVM产生原因、产生时间(可手动获取,可系统抛出)

∙∙全局垃圾回收次数、分配失败次数、内存溢出时,最后一次详细的垃圾回收记录

∙∙JVM堆内存地址信息

∙∙JVM中,所有线程执行情况(包含应用程序内部执行线程,容器线程,垃圾回收线程,定时线程,线程池线程,页面请求转发线

程等多种线程信息)

∙∙已装载入JVM中的类的信息

如下表:

三、如何分析Javacore?

我们可以通过Javacore提供的信息对JVM进行一个全面的分析,除了了解垃圾回收情况、JVM相关配置信息外,分析重点可放在线程执行情况上,分析哪些线程在等待,哪些在执行,以便快速缩小问题范围。

(打开Javacore文件,庞大的字符串使得我们查找信息十分不便,此时我们可以利用IBM Thread and Monitor Dump Analyzer for Ja va工具分析,该工具可以让我们清晰的分析Javacore文件)。

在IBM Thread and Monitor Dump Analyzer for Java工具中,请求线程可分为以下几种状态:

∙∙死锁,Deadlock(重点关注)

∙∙执行中,Runnable(重点关注)

∙∙等待资源,Waiting on condition(重点关注)

∙∙等待监控器检查资源,Waiting on monitor

∙∙暂停,Suspended

∙∙对象等待中,Object.wait()

∙∙阻塞,Blocked(重点关注)

∙∙停止,Parked

在整个分析过程中,我们需要根据问题分析线程的运行的情况(如该Javacore是什么时候生成的,是内存溢出,还是系统繁忙时),查看不同状态的线程的执行堆栈,分析堆栈找到其中属于系统应用的代码可进一步缩小问题点(在版本稳定的中间件里,我们分析问题一般先从应用代码入手,了解是哪些业务代码触发了问题)。我们要了解线程状态具体的意思,线程中的堆栈代码,整个容器的各个类型线程的情况,结合这些信息进行深入的分析。

相关文档
最新文档