WAS关键性能参数配置及异常分析 下载本文

内容发布更新时间 : 2024/6/11 18:25:40星期一 下面是文章的全部内容请认真阅读。

(1)直接打开Javacore文件查看

直接打开后,可以看到关键信息,可以看到每一个线程的执行栈,以stacktrace的方式显示。通过对javacore的分析可以得到应用是否“卡”在某一点上,即在某 一点运行的时间太长。

例如:

可看出有java/lang/OutOfMemoryError的异常信息。

(2)运用javacore分析工具

下载javacore运行工具jca:

运行java –Xmx1024m –jar jca.jar:

可看线程运行情况:

请求线程可分为以下几种状态: 死锁,Deadlock(重点关注) 执行中,Runnable(重点关注)

等待资源,Waiting on condition(重点关注) 等待监控器检查资源,Waiting on monitor 暂停,Suspended

对象等待中,Object.wait() 阻塞,Blocked(重点关注) 停止,Parked

Deadlock:死锁线程,一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。

Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递SQL到数据库执行,有可能在对某个文件操作,有可能进行数据类型等转换。 Waiting on condition:等待资源,如果堆栈信息明确是应用代码,则证明该线程正在等待资源,一般是大量读取某资源,且该资源采用了资源锁的情况下,线程进入等待状态,等待资源的读取。又或者,正在等待其他线程的执行等。

Blocked:线程阻塞,是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。这种情况在was的日志中,一般可以看到CPU饥渴,或者某线程已执行了XX秒的信息。

一般建议的分析逻辑:

? 在内存溢出时,分析Javacore文件中的线程内容,可以采用自下而上的分析方法。 ? 查看有多少线程被设置了Blocked状态,这些线程是在执行什么请求,并且到了堆栈最

后一步在等待什么资源

? 查找到这些Blocked线程等待的执行线程编号

? 继续查找该线程,分析其堆栈与状态与监控器的记录的信息。一般这些线程会处于

Waiting on condition状态,因为这些线程也是因为资源迟迟未获取到或者执行时间

过长一直处于等待状体,进一步导致队列中其他需要访问这些资源的线程都被设置为Blocked状态。

? 在找到线程后,我们就可以初步将问题缩小到哪些业务应用请求存在问题,是哪一个类

与哪一行代码,其等待的资源是什么。

备注:具体情况具体分析,后续需根据实际经验完善。

3.1.2 heapdump的分析

heapdump文件是一个二进制文件,它保存了某一时刻jvm堆中对象情况,这种文件需要相应的工具进行分析,可以从网上下载最新的分析工具。

因打开heapdump文件对系统内存要求较高,一般只能借用64位的服务器进行分析问题。

HeapDump的生成开关

–export IBM_HEAPDUMP=true –export IBM_HEAP_DUMP=true

–export IBM_HEAPDUMP_OUTOFMEMORY=true –export IBM_JAVADUMP_OUTOFMEMORY=true –export IBM_JAVACORE_OUTOFMEMORY=true –export IBM_HEAPDUMPDIR=

注意:

–通常HeapDump会比较大,尤其是在Heap内存设置很大的情况下 –为了重现问题,得到现场数据,建议先把HeapDump调小,推荐1G以下 –在Window上,如果HeapDump大于1G,可能会无法打开,出现OOM错误 –启动HeapAnalyzer需要指定-Xmx参数

例子:

(1)启动工具:Java –Xmx2048m –jar ha405.jar

(2) 内存按树状引用关系显示