综调四版项目组JavaCore及HeapDump分析讲义
- 格式:pdf
- 大小:689.77 KB
- 文档页数:23
javaheapdump生成过程原理---JavaHeapDump生成过程原理是一个重要的主题,涉及到Java内存管理和性能优化的核心知识。
本篇文章将详细解析HeapDump的生成过程,探讨其原理和相关因素。
一、Java内存管理基础Java内存管理是Java虚拟机(JVM)的重要部分,它负责分配和回收系统资源。
Java对象在堆内存中创建和存储,堆内存是JVM中最大的一块内存区域,用于存储所有实例对象。
二、HeapDump概述HeapDump是Java虚拟机在需要时,将堆内存区域转储到文件的过程。
HeapDump通常用于诊断Java应用程序的性能问题,如内存泄漏、OutOfMemoryError等。
HeapDump可以提供详细的堆内存状态信息,帮助开发者定位问题。
1.触发HeapDump:当JVM检测到堆内存压力过大,或者通过用户请求,它会触发HeapDump过程。
HeapDump可以通过JVM的命令行参数(如-XX:+HeapDumpOnOutOfMemoryError)进行配置。
2.生成快照:JVM会暂停所有线程,保存当前的堆内存状态为快照。
这个过程会对应用程序性能产生一定影响,因此通常在紧急情况下使用。
3.生成HeapDump文件:暂停线程后,JVM会将当前的堆内存状态写入到一个文件中,这个文件就是HeapDump文件。
文件通常以.hprof 为后缀,可以由各种工具进行分析。
4.清理堆内存:生成HeapDump文件后,JVM会释放暂停期间占用的堆内存,以恢复正常的堆内存使用。
四、影响HeapDump的因素1.JVM参数:如-XX:+HeapDumpPath,用于指定HeapDump文件的存放位置。
其他参数如-XX:+PrintGCDetails和-XX:+PrintGCDateStamps则用于输出详细的GC信息,帮助诊断性能问题。
2.内存使用情况:当应用程序的堆内存使用超过一定阈值时,JVM 会触发HeapDump过程。
Day 01一、 从面向过程编程到面向对象编程的思维转变我们知道所有的计算机程序都是由两类元素组成:代码和数据。
此外从概念上将讲,程序还可以以他的代码或是数据为核心进行组织编写。
也就是说一些程序围绕“正在发生什么编写“,而另一些程序则围绕”谁将被影响“编写。
这两种范型决定程序的构建方法。
第一种方法被称为面向过程的模型,用他编写的程序都具有线性执行的特点。
面向过程的模型可以认为是代码作用于数据,用C写的程序就是典型的面向过程模型。
第二种方法也就是我们现在正在学习的面向对象编程,面向对象编程围绕她的数据(即对象)和为这个数据严格定义的接口来组织程序。
面向对象的程序实际上就是用数据控制对代码的访问。
CoreJava就是一门纯面向对象编程的语言。
学习方法很简单,就是模仿、改进、创新,循环往复。
二、 什么是字节码和虚拟机:字节码是一套设计用来在Java运行时系统下执行的高度优化的指令集。
该Java运行时系统称为Java虚拟机(JVM)。
JVM其实就是一个字节码解释器。
虚拟机将字节码解释成机器码给CPU执行,所以我们在java中通过虚拟机的这种解释执行方式来屏蔽底层操作系统的差异。
JRE = JVM+编译器JDK= JVM+编译器+类库查看类库源码在:JDK/src.zip压缩包里三、 环境变量的设置:需要新加的两个环境变量1、JA V A_HOME:指名JDK的位置。
2、CLASSPATH:指名到哪里去找运行时需要用到的类代码(字节码)原有的环境变量1、PATH:指名可执行程序的位置。
2、EXPORT :将指定的环境变量声明为全局的。
我们在.bash_profile下的环境变量设置。
JA V A_HOME=/opt/jdk1.5CLASSPATH=.PATH=$PATH:$JA V A_HOME/bin:.注:“.”代表当前目录当我们把环境变量都配置好了以后在终端敲入”java-version”命令如果出现JDK版本号信息就表示我们环境变量设置成功了。
JAVA内存泄露、溢出的检查⽅法、⼯具介绍问题发现:在我们运⾏的⼀个项⽬上线运营后发现运⾏两天左右就会报内存溢出,只有重启tomcat才能恢复服务,异常信息如下:ng.OutOfMemoryError: GC overhead limit exceededng.OutOfMemoryError: Java heap space原因分析:在此之前必须先介绍⼀下关于jvm的内存控制,JVM即java虚拟机,它运⾏时候占⽤⼀定的内存,其⼤⼩是有限定的,如果程序在运⾏时jvm 占⽤的内存⼤于某个限度,则会产⽣内存溢出,也就是“ng.outofmemoryerror”。
如果jvm内存的没有限度,并且有⽆限⼤的内存,那jvm就永远不会出现内存溢出了。
很明显⽆限的内存是不现实的,但是⼀般情况下我们程序运⾏过程所需要的内存应该是⼀个基础固定的值,如果仅是因为我们的项⽬所需内存超过了jvm设置内存值导致内存溢出,那么我们可以通过增⼤jvm的参数设置来解决内存溢出的问题。
详细处理可参考java jvm的如下参数设置:-Xms -Xmx -Xmn -Xss-Xms: 设置JVM初始内存,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx:设置JVM最⼤可⽤内存。
-Xmn:设置年轻代⼤⼩,整个堆⼤⼩=年轻代⼤⼩+年⽼代⼤⼩+持久代⼤⼩.持久代⼀般固定⼤⼩为64m,所以增⼤年轻代后,将会减⼩年⽼代⼤⼩.此值对系统性能影响较⼤,Sun官⽅推荐配置为整个堆的3/8.-Xss:设置每个线程的堆栈⼤⼩.在相同物理内存下,减⼩这个值能⽣成更多的线程.但是操作系统对⼀个进程内的线程数还是有限制的,不能⽆限⽣成。
在jvm参数调试过程中,发现分配最⼤内存数超过1G后,仍然会产⽣内存溢出的现象,⽽估计其正常分配使⽤的内存应该不会超过1G,那么由此可以基本断定其存在内存泄露现象,也就是⼀些原来分配的不再使⽤的内存不能被java的垃圾回归所回收,导致不断占⽤原分配的内存⽽不释放,导致不断申请更多的内存直到超过内存设置⽽导致内存溢出。
j a v a d u m p分析Java 的线程线程是指能独立于程序的其它部分运行的执行单元。
JAVA语言能够很好的实现多线程的程序。
我们在调试程序,或者在开发后期需要做性能调优的时候,往往也需要了解当前程序正在运行的线程的状态,正在执行的操作,从而分析系统可能存在的问题。
在阅读本文之间,应对 Java线程的编程原理,同步机制有一定了解 .产生 JAVA线程 dumpJAVA 的线程 DUMP,就象当前 JAVA进程的一个快照,打印出所有线程的状态和调用堆栈,以及 Monitor的状态。
在不同的操作系统下,产生线程 DUMP 的方式是不同的。
在启动程序的控制台里敲: Ctrl - Break,线程的 dump会产生在标准输出中(缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件)。
在 unix, linux和 MacOS 环境中,在控制台中敲: Ctrl-\,或者,用“kill -3 <pid>” ,或者“kill –QUIT <pid>”。
Pid是用所关注的 JAVA 进程号,您可以用“ps -ef | grep java” 找到,或者使用 JDK 5.0中的“jps -v” 命令获得。
在各个操作系统平台,都可以用 JDK 5.0工具包中的 jstack <pid>这里要注意的是:1. 不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别。
本文中,只以 SUN的 hotspot JVM 5.0_06 为例。
2. 在实际运行中,往往一次 dump的信息,还不足以确认问题。
建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。
线程分析:1. JVM 线程在线程中,有一些 JVM内部的后台线程,来执行譬如垃圾回收,或者低内存的检测等等任务,这些线程往往在 JVM初始化的时候就存在,如下所示:"Low Memory Detector" daemon prio=10 tid=0x081465f8 nid=0x7 runnable [0x00000000..0x00000000]"CompilerThread0" daemon prio=10 tid=0x08143c58 nid=0x6 waiting on condition [0x00000000..0xfb5fd798]"Signal Dispatcher" daemon prio=10 tid=0x08142f08 nid=0x5 waiting on condition [0x00000000..0x00000000]"Finalizer" daemon prio=10 tid=0x08137ca0 nid=0x4 in Object.wait()[0xfbeed000..0xfbeeddb8]at ng.Object.wait(Native Method)- waiting on <0xef600848> (a ng.ref.ReferenceQueue$Lock)at ng.ref.ReferenceQueue.remove(ReferenceQueue.java:116)- locked <0xef600848> (a ng.ref.ReferenceQueue$Lock)at ng.ref.ReferenceQueue.remove(ReferenceQueue.java:132)at ng.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)"Reference Handler" daemon prio=10 tid=0x081370f0 nid=0x3 in Object.wait() [0xfbf4a000..0xfbf4aa38]at ng.Object.wait(Native Method)- waiting on <0xef600758> (a ng.ref.Reference$Lock)at ng.Object.wait(Object.java:474)at ng.ref.Reference$ReferenceHandler.run(Reference.java:116)- locked <0xef600758> (a ng.ref.Reference$Lock)"VM Thread" prio=10 tid=0x08134878 nid=0x2 runnable"VM Periodic Task Thread" prio=10 tid=0x08147768 nid=0x8 waiting on condition我们更多的是要观察用户级别的线程,如下所示:"Thread-1" prio=10 tid=0x08223860 nid=0xa waiting on condition[0xef47a000..0xef47ac38]at ng.Thread.sleep(Native Method)at testthread.MySleepingThread.method2(MySleepingThread.java:53)- locked <0xef63d600> (a testthread.MySleepingThread)at testthread.MySleepingThread.run(MySleepingThread.java:35)at ng.Thread.run(Thread.java:595)我们能看到:线程的状态: waiting on condition线程的调用栈线程的当前锁住的资源:<0xef63d600>这些信息对我们随后的分析都有用处。
产生时间Java程序运行时,有时会产生JavaCore及HeapDump文件,它一般发生于Java程序遇到致命问题的情况下。
∙有时致命问题发生后,Java应用不会死掉,还能继续运行;∙但有时致命问题发生,Java进程会死掉;为了能够保留Java应用发生致命错误前的运行状态,JVM在死掉前产生两个文件,分别为JavaCore及HeapDump文件。
有何区别JavaCore是关于CPU的,而HeapDump文件是关于内存的。
∙JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。
它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。
通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。
∙HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。
这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。
怎么生成这两个文件可以用手工的方式生成,当我们会遇到系统变慢或无响应的情况,这时就以采用手工的方式生成JavaCore及HeapDump文件。
在Unix/Linux上,产生这两个文件的方法如下:# ps -ef | grep javauser 46164582017:30 pts/0 00:00:00 grep javaroot 558010 Oct27 ? 00:02:27/usr/bin/java -server -XX:PermSize=64M-XX:MaxPermSi ze=128m-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.uti l.logging.config.file=/usr/local/tomcat8090/conf/logging.properties-Djava.endorsed.dirs=/u sr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatali na.base=/usr/local/tomcat8090-Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/ usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start# kill -3 5580首先,找出Java进程id ,然后再执行…kill -3 进程号‟的操作,等文件生成后再做一次同样的操作,再产生一组文件。
Dump⽂件分析(转发)原⽂:本⽂主要介绍Dump⽂件结构,理解Dump⽂件对于分析线程⾼占⽤、死锁、内存溢出等⾼级问题有⾮常重要的指导意义。
什么是Dump⽂件Dump⽂件是进程的内存镜像。
可以把程序的执⾏状态通过调试器保存到dump⽂件中。
Dump⽂件是⽤来给程序编写⼈员调试程序⽤的,这种⽂件必须⽤专⽤⼯具软件打开。
如何⽣成Dump⽂件使⽤命令:jstack pid可以查看到当前运⾏的java进程的dump信息。
Dump⽂件结构⾸先浏览⼀下dump⽂件的⽂本内容:Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.77-b03 mixed mode):"Attach Listener" #37 daemon prio=9 os_prio=0 tid=0x00007f87b42b7000 nid=0x680f waiting on condition [0x0000000000000000]ng.Thread.State: RUNNABLE"Druid-ConnectionPool-Destory-331358539" #36 daemon prio=5 os_prio=0 tid=0x00007f87a4278800 nid=0x67e4 waiting on condition [0x00007f87b8dce000] ng.Thread.State: TIMED_WAITING (sleeping)at ng.Thread.sleep(Native Method)at com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:1724)"Druid-ConnectionPool-Create-331358539" #35 daemon prio=5 os_prio=0 tid=0x00007f87a4022000 nid=0x67e3 waiting on condition [0x00007f87ce86a000] ng.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x00000000b3804848> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1629)"Abandoned connection cleanup thread" #31 daemon prio=5 os_prio=0 tid=0x00007f87e0d91800 nid=0x672b in Object.wait() [0x00007f87cd2c2000]ng.Thread.State: TIMED_WAITING (on object monitor)at ng.Object.wait(Native Method)at ng.ref.ReferenceQueue.remove(ReferenceQueue.java:143)- locked <0x00000000b422d1e8> (a ng.ref.ReferenceQueue$Lock)at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)"DestroyJavaVM" #30 prio=5 os_prio=0 tid=0x00007f87e0008800 nid=0x670b waiting on condition [0x0000000000000000]ng.Thread.State: RUNNABLE"http-nio-8081-AsyncTimeout" #28 daemon prio=5 os_prio=0 tid=0x00007f87e016e800 nid=0x6727 waiting on condition [0x00007f87b94cf000]ng.Thread.State: TIMED_WAITING (sleeping)at ng.Thread.sleep(Native Method)at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1211)at ng.Thread.run(Thread.java:745)"http-nio-8081-Acceptor-0" #27 daemon prio=5 os_prio=0 tid=0x00007f87e0166000 nid=0x6726 runnable [0x00007f87b95d0000]ng.Thread.State: RUNNABLEat sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)- locked <0x00000000b410d480> (a ng.Object)at .NioEndpoint$Acceptor.run(NioEndpoint.java:455)at ng.Thread.run(Thread.java:745)"http-nio-8081-ClientPoller-0" #26 daemon prio=5 os_prio=0 tid=0x00007f87e0292800 nid=0x6725 runnable [0x00007f87b96d1000]ng.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked <0x00000000b410d6c0> (a sun.nio.ch.Util$2)- locked <0x00000000b410d6b0> (a java.util.Collections$UnmodifiableSet)- locked <0x00000000b410d668> (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at .NioEndpoint$Poller.run(NioEndpoint.java:793)at ng.Thread.run(Thread.java:745)"http-nio-8081-exec-10" #25 daemon prio=5 os_prio=0 tid=0x00007f87e028c000 nid=0x6724 waiting on condition [0x00007f87b97d2000]ng.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x00000000b410d898> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at ng.Thread.run(Thread.java:745)其中每个空⾏⽤于分隔⼀个线程,每个线程的信息是以堆栈信息的⽅式展开,显⽰了⽬前正在调⽤的⽅法以及所在的代码⾏。
JavaDump分析JavaDump分析一、Java Dump概述Dump,即“转储”。
Java Dump可以保留Java虚拟机的瞬时快照。
相比于传统的控制台输出,提供了更多的信息用于分析运行系统状态及错误。
可弥补传统在Java平台上分析Bug手段的一些不足。
Java Dump分为两种:●线程Dump:纯文本格式。
包含所有线程的运行状态、调用栈、锁信息等。
●堆Dump:二进制格式,需要工具查看。
包含了线程Dump的所有信息,此外还包括系统信息、Java虚拟机参数以及堆对象的状态。
Java Dump的分析,特别适合于生产环境下,并且针对非功能性的问题,主要为:多线程并发、内存泄漏。
二、制作Dump1.Java虚拟机发行版不同Java虚拟机的Dump规范不完全相同,所以在制作Dump 时,需要注意虚拟机发行版。
●HotSpot VM:原Sun提供的官方Java虚拟机,支持Linux、Windows、Solaris平台。
●OpenJDK:Sun JDK的开源版本,1.6后跟HotSpot差别不太大了。
●JRockit:WebLogic使用的Java虚拟机,BEA开发。
●IBM J9 VM:IBM开发的Java虚拟机,AIX平台上的唯一实现。
2.原理3.注意事项1)Java虚拟机发行版使用相同的Java虚拟机发行版。
即意味着使用SunJDK的工具,连接SunJRE的应用系统来制作Dump。
2)版本要求●目标虚拟机必须为1.6或以及的jdk。
使用OOM参数制作堆Dump可使用1.5的jdk。
(各虚拟机差异较大)●制作工具需要使用相同发行版的jdk,并且建议1.6以上。
3)堆Dump格式相对纯文本的线程dump而言,堆Dump目前存在多种不同的格式。
●HPROF,Sun 的Java虚拟机的堆Dump格式。
●PHD,IBM Portable Heap Dump。
IBM J9 VM生成的Dump 格式。
4.使用虚拟机参数1)内存溢出时自动堆Dump为虚拟机增加启动参数:则当虚拟机发生OutOfMemoryError时,自动生成堆Dump。
coredump文件考出解析Core Dump文件是指在计算机程序运行时,出现异常情况导致程序崩溃时所生成的一种文件。
这个文件记录了程序在崩溃时的内存状态信息,包含了程序运行时的堆栈信息、寄存器状态以及其他相关的调试信息等。
通过分析Core Dump文件,可以帮助开发人员定位和解决程序崩溃的问题。
Core Dump文件的解析对于软件开发人员来说是一项非常重要的技能,可以帮助他们快速定位和修复程序中的bug。
下面就让我们来了解一下Core Dump文件的解析过程吧。
要解析Core Dump文件,我们需要借助一些调试工具。
常用的调试工具有GDB(GNU Debugger)、LLDB(LLVM Debugger)等。
这些工具可以加载Core Dump文件,并提供一系列命令和功能来分析和调试程序。
解析Core Dump文件的第一步是加载文件。
使用调试工具加载Core Dump文件后,我们可以查看文件中的各种信息。
比如,我们可以查看程序崩溃时的堆栈信息,了解程序在崩溃前的执行路径。
通过分析堆栈信息,我们可以确定程序崩溃的位置,找出导致程序崩溃的原因。
除了堆栈信息,Core Dump文件还包含了程序崩溃时的内存状态信息。
我们可以通过查看内存状态,了解程序在崩溃前的变量值、函数调用等信息。
这对于定位程序崩溃的原因非常有帮助。
在解析Core Dump文件时,我们还可以使用调试工具提供的其他功能,比如查看变量的值、设置断点、单步执行等。
这些功能可以帮助我们进一步分析和调试程序。
在进行Core Dump文件解析时,我们需要注意以下几点。
首先,要保证使用的调试工具版本与生成Core Dump文件的程序版本一致,以免出现兼容性问题。
其次,要注意文件的大小,如果Core Dump 文件过大,可能需要分析工具支持加载大文件。
此外,要注意保护好Core Dump文件的安全,避免泄露敏感信息。
除了使用调试工具解析Core Dump文件,还有一些第三方工具和库可以帮助我们更方便地分析Core Dump文件。
Java dump通常指的是Java堆转储(Java Heap Dump),它是一个包含Java应用程序运行时堆内存信息的文件。
Java堆转储可以帮助开发者诊断和解决Java应用程序的性能问题、内存泄漏和其他相关的错误。
以下是一些Java堆转储的高级用法:
1.分析内存泄漏:内存泄漏是Java应用程序中常见的问题之一,它会导致应用程序的可用内存逐
渐减少,最终导致应用程序崩溃。
通过分析Java堆转储,可以确定哪些对象占用了大量的内存,哪些对象无法被垃圾回收器回收,从而找到内存泄漏的原因。
常用的工具包括Eclipse Memory Analyzer、VisualVM等。
2.诊断性能问题:性能问题通常表现为应用程序运行缓慢或响应时间过长。
通过分析Java堆转储,
可以找到导致性能问题的对象,例如大量的临时对象、大对象等。
这可以帮助开发者优化应用程序的内存使用和垃圾回收策略,从而提高应用程序的性能。
3.识别线程阻塞:线程阻塞是导致应用程序卡顿和死锁的原因之一。
通过分析Java堆转储,可以
找到导致线程阻塞的对象,例如锁、同步块等。
这可以帮助开发者优化线程的使用和管理,避免线程阻塞的发生。
4.识别内存溢出:内存溢出是Java应用程序中非常严重的问题,它会导致应用程序崩溃。
通过分
析Java堆转储,可以找到导致内存溢出的原因,例如大量的对象无法被垃圾回收器回收、内存泄漏等。
这可以帮助开发者及时发现和修复内存溢出问题。
综调四版项目组JavaCore及HeapDump分析讲义(一)W ebsphere如何生成javacore与heapdump文件重点我们要明白javacore文件(关于cpu的)而heapdump文件(关于内存的)1.javacore与heapdump有何区别JavaCore是关于CPU的,而HeapDump文件是关于内存的。
1)JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。
它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。
通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。
2)HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。
这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。
2.javacore与heapdump设置在was启动前设置下面环境变量(可以加在启动脚本中)export IBM_HEAPDUMP=trueexport IBM_HEAP_DUMP=trueexport IBM_HEAPDUMP_OUTOFMEMORY=trueexport IBM_HEAPDUMPDIR=<directory path>马宏波mahongbo@根据需要依次增加对应的条目这两个文件可以用手工的方式生成,当我们会遇到系统变慢或无响应的情况,这时就以采用手工的方式生成JavaCore及HeapDump文件。
在Unix/Linux上,产生这两个文件的方法如下:# ps -ef | grep javauser 46164582017:30 pts/0 00:00:00 grep javaroot 558010 Oct27 ? 00:02:27/usr/bin/java -server -XX:PermSize=64M-XX:MaxPermSi ze=128m-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.uti l.logging.config.file=/usr/local/tomcat8090/conf/logging.properties-Djava.endorsed.dirs=/u sr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatali na.base=/usr/local/tomcat8090-Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/ usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start马宏波mahongbo@# kill -3 5580首先,找出Java进程id ,然后再执行‘kill -3 进程号’的操作,等文件生成后再做一次同样的操作,再产生一组文件。
将上面产生的txt 文件和/usr/WebSphere/AppServer/javacore*文件和heapdump文件拷贝到本地,然后删除这些文件,因为这些文件会占用较大的文件系统空间。
将/usr/WebSphere/AppServer/logs/wlmserver1(或2)目录下当天产生的日志拷贝出来(二)Websphere javacore与heapdump文件的分析1.文件产生的时间Java程序运行时,有时会产生JavaCore及HeapDump文件,它一般发生于Java程序遇到致命问题的情况下。
∙有时致命问题发生后,Java应用不会死掉,还能继续运行;∙但有时致命问题发生,Java进程会死掉;为了能够保留Java应用发生致命错误前的运行状态,JVM在死掉前产生两个文件,分别为JavaCore及HeapDump文件。
2.分析JavaCore文件两组文件在分析JavaCore时特别有效,因为它可以看出在先后两个时间点上,线程执行的位置,如果发现先后两组数据中同一线程都执行在同一位置,则说明此处可能有问题,因为程序运行是极快的,如果两次均在某一点上,说明这一点耗时是很大的,通过对这两个文件进行分析,查出原因,进而解决问题。
JavaCore文件的头部有一个“Current Thread Details”标记,它记录了JavaCore产生时系统运行的线程id,使用线程id在文件中查找线程的详细信息,该信息中记载了线程运行哪个类的时候造成的JavaCore。
NULL ------------------------------------------------------------------------0SECTION TITLE subcomponent dump routineNULL ===============================1TISIGINFO Dump Event "user" (00004000) received1TIDATETIME Date: 2012/06/07 at 16:25:05马宏波mahongbo@1TIFILENAME Javacore filename:/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/javacore.20120607.162505.26652.00 02.txt1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt)1TIPREPSTATE Prep State: 0x4 (exclusive_vm_access)NULL ------------------------------------------------------------------------0SECTION GPINFO subcomponent dump routineNULL ================================2XHOSLEVEL OS Level : Linux 2.6.18-194.el52XHCPUS Processors -3XHCPUARCH Architecture : amd643XHNUMCPUS How Many : 83XHNUMASUP NUMA support enabledNULL1XHERROR2 Register dump section only produced for SIGSEGV, SIGILL or SIGFPE.NULLNULL ------------------------------------------------------------------------0SECTION ENVINFO subcomponent dump routineNULL =================================1CIJAVAVERSION JRE 1.6.0 IBM J9 2.4 Linux amd64-64 buildjvmxa6460sr9-20110712_868031CIVMVERSION VM build 20110712_0868031CIJITVERSION JIT enabled, AOT enabled - r9_20101028_17488ifx171CIGCVERSION GC - 20101027_AA_CMPRSS1CIRUNNINGAS Running as a standalone JVM1CICMDLINE /opt/IBM/WebSphere/AppServer/java/bin/java -Declipse.security-Dwas.status.socket=43661 -Dosgi.install.area=/opt/IBM/WebSphere/AppServer-Dosgi.configuration.area=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/configurati on -Djava.awt.headless=true-Dosgi.framework.extensions=com.ibm.cds,com.ibm.ws.eclipse.adaptors-Xshareclasses:name=webspherev70_%g,groupAccess,nonFatal -Xscmx50M-Xbootclasspath/p:/opt/IBM/WebSphere/AppServer/java/jre/lib/ext/ibmorb.jar:/opt/IBM/We bSphere/AppServer/java/jre/lib/ext/ibmext.jar -classpath马宏波mahongbo@/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/properties:/opt/IBM/WebSphere/AppS erver/properties:/opt/IBM/WebSphere/AppServer/lib/startup.jar:/opt/IBM/WebSphere/App Server/lib/bootstrap.jar:/opt/IBM/WebSphere/AppServer/lib/jsf-nls.jar:/opt/IBM/WebSpher e/AppServer/lib/lmproxy.jar:/opt/IBM/WebSphere/AppServer/lib/urlprotocols.jar:/opt/IBM/ WebSphere/AppServer/deploytool/itp/batchboot.jar:/opt/IBM/WebSphere/AppServer/depl oytool/itp/batch2.jar:/opt/IBM/WebSphere/AppServer/java/lib/tools.jar-Dibm.websphere.internalClassAccessMode=allow -verbose:class -Xms1024m-Xmx2048m -Xcompressedrefs-Dws.ext.dirs=/opt/IBM/WebSphere/AppServer/java/lib:/opt/IBM/WebSphere/AppServer/p rofiles/AppSrv02/classes:/opt/IBM/WebSphere/AppServer/classes:/opt/IBM/WebSphere/ AppServer/lib:/opt/IBM/WebSphere/AppServer/installedChannels:/opt/IBM/WebSphere/A ppServer/lib/ext:/opt/IBM/WebSphere/AppServer/web/help:/opt/IBM/WebSphere/AppServ er/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime-Dderby.system.home=/opt/IBM/WebSphere/AppServer/derby-Dcom.ibm.itp.location=/opt/IBM/WebSphere/AppServer/bin-Djava.util.logging.configureByServer=true-Duser.install.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02-Djavax.management.builder.initial=com.ibm.ws.management.PlatformMBeanServerBuil der -Dwas.install.root=/opt/IBM/WebSphere/AppServer-Dpython.cachedir=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/temp/cachedir-Djava.util.logging.manager=com.ibm.ws.bootstrap.WsLogManager-Dserver.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02-Dcom.ibm.security.jgss.debug=off -Dcom.ibm.security.krb5.Krb5Debug=off -Xnoclassgc -Xgcpolicy:gencon -agentlib:getClasses -Dclient.encoding.override=UTF-8-Dfile.encoding=UTF-8 -Duser.timezone=GMT+8-Xdump:stack:events=allocation,filter=#10m-Djava.security.auth.login.config=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/prop erties/wsjaas.conf-Djava.security.policy=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/properties/serv er.policy com.ibm.wsspi.bootstrap.WSPreLauncher -nosplash -applicationcom.ibm.ws.bootstrap.WSLauncher com.ibm.ws.runtime.WsServer/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/config jszhdd01Cell01jszhdd02Node01 AppSrv211CIJAVAHOMEDIR Java Home Dir: /opt/IBM/WebSphere/AppServer/java/jre马宏波mahongbo@1CIJAVADLLDIR Java DLL Dir: /opt/IBM/WebSphere/AppServer/java/jre/bin1CISYSCP Sys Classpath:/opt/IBM/WebSphere/AppServer/java/jre/lib/endorsed/el-ri-1.0.jar;/opt/IBM/WebSphere/A ppServer/java/jre/lib/endorsed/el-api-1.0.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/e ndorsed/jboss-el-2.0.1.GA.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/ext/ibmorb.jar;/ opt/IBM/WebSphere/AppServer/java/jre/lib/ext/ibmext.jar;/opt/IBM/WebSphere/AppServe r/java/jre/lib/amd64/compressedrefs/jclSC160/vm.jar;/opt/IBM/WebSphere/AppServer/jav a/jre/lib/annotation.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/beans.jar;/opt/IBM/We bSphere/AppServer/java/jre/lib/java.util.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/jn di.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/logging.jar;/opt/IBM/WebSphere/AppSe rver/java/jre/lib/security.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/sql.jar;/opt/IBM/W ebSphere/AppServer/java/jre/lib/ibmorb.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/ib morbapi.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/ibmcfw.jar;/opt/IBM/WebSphere/ AppServer/java/jre/lib/rt.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/charsets.jar;/opt/I BM/WebSphere/AppServer/java/jre/lib/resources.jar;/opt/IBM/WebSphere/AppServer/jav a/jre/lib/ibmpkcs.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/ibmcertpathfw.jar;/opt/IB M/WebSphere/AppServer/java/jre/lib/ibmjgssfw.jar;/opt/IBM/WebSphere/AppServer/java/j re/lib/ibmjssefw.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/ibmsaslfw.jar;/opt/IBM/We bSphere/AppServer/java/jre/lib/ibmjcefw.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/ib mjgssprovider.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/ibmjsseprovider2.jar;/opt/IB M/WebSphere/AppServer/java/jre/lib/ibmcertpathprovider.jar;/opt/IBM/WebSphere/AppSe rver/java/jre/lib/ibmxmlcrypto.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/management -agent.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/xml.jar;/opt/IBM/WebSphere/AppS erver/java/jre/lib/jlm.jar;/opt/IBM/WebSphere/AppServer/java/jre/lib/javascript.jar;1CIUSERARGS UserArgs:2CIUSERARG -Xjcl:jclscar_242CIUSERARG-Dcom.ibm.oti.vm.bootstrap.library.path=/opt/IBM/WebSphere/AppServer/java/jre/lib/amd 64/compressedrefs:/opt/IBM/WebSphere/AppServer/java/jre/lib/amd642CIUSERARG-Dsun.boot.library.path=/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64/compressedr efs:/opt/IBM/WebSphere/AppServer/java/jre/lib/amd642CIUSERARG-Djava.library.path=/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64/compressedrefs:/马宏波mahongbo@opt/IBM/WebSphere/AppServer/java/jre/lib/amd64:/opt/IBM/WebSphere/AppServer/bin::/ usr/lib2CIUSERARG -Djava.home=/opt/IBM/WebSphere/AppServer/java/jre2CIUSERARG-Djava.ext.dirs=/opt/IBM/WebSphere/AppServer/java/jre/lib/ext2CIUSERARG-Duser.dir=/opt/IBM/WebSphere/AppServer/profiles/AppSrv022CIUSERARG _j2se_j9=1119744 0x00002AAAAABCBE802CIUSERARG -Djava.runtime.version=pxa6460sr9fp2-20110727_04 (SR9 FP2)2CIUSERARG -Xdump2CIUSERARG -Djava.class.path=.2CIUSERARG -Declipse.security2CIUSERARG -Dwas.status.socket=436612CIUSERARG -Dosgi.install.area=/opt/IBM/WebSphere/AppServer2CIUSERARG-Dosgi.configuration.area=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/configurati on2CIUSERARG -Djava.awt.headless=true2CIUSERARG-Dosgi.framework.extensions=com.ibm.cds,com.ibm.ws.eclipse.adaptors2CIUSERARG-Xshareclasses:name=webspherev70_%g,groupAccess,nonFatal2CIUSERARG -Xscmx50M2CIUSERARG-Xbootclasspath/p:/opt/IBM/WebSphere/AppServer/java/jre/lib/ext/ibmorb.jar:/opt/IBM/We bSphere/AppServer/java/jre/lib/ext/ibmext.jar2CIUSERARG-Djava.class.path=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/properties:/opt/IBM /WebSphere/AppServer/properties:/opt/IBM/WebSphere/AppServer/lib/startup.jar:/opt/IB M/WebSphere/AppServer/lib/bootstrap.jar:/opt/IBM/WebSphere/AppServer/lib/jsf-nls.jar:/ opt/IBM/WebSphere/AppServer/lib/lmproxy.jar:/opt/IBM/WebSphere/AppServer/lib/urlprot ocols.jar:/opt/IBM/WebSphere/AppServer/deploytool/itp/batchboot.jar:/opt/IBM/WebSpher e/AppServer/deploytool/itp/batch2.jar:/opt/IBM/WebSphere/AppServer/java/lib/tools.jar马宏波mahongbo@2CIUSERARG -Dibm.websphere.internalClassAccessMode=allow2CIUSERARG -verbose:class2CIUSERARG -Xms1024m2CIUSERARG -Xmx2048m2CIUSERARG -Xcompressedrefs2CIUSERARG-Dws.ext.dirs=/opt/IBM/WebSphere/AppServer/java/lib:/opt/IBM/WebSphere/AppServer/p rofiles/AppSrv02/classes:/opt/IBM/WebSphere/AppServer/classes:/opt/IBM/WebSphere/ AppServer/lib:/opt/IBM/WebSphere/AppServer/installedChannels:/opt/IBM/WebSphere/A ppServer/lib/ext:/opt/IBM/WebSphere/AppServer/web/help:/opt/IBM/WebSphere/AppServ er/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime2CIUSERARG-Dderby.system.home=/opt/IBM/WebSphere/AppServer/derby2CIUSERARG-Dcom.ibm.itp.location=/opt/IBM/WebSphere/AppServer/bin2CIUSERARG -Djava.util.logging.configureByServer=true2CIUSERARG-Duser.install.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv022CIUSERARG-Djavax.management.builder.initial=com.ibm.ws.management.PlatformMBeanServerBuil der2CIUSERARG -Dwas.install.root=/opt/IBM/WebSphere/AppServer2CIUSERARG-Dpython.cachedir=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/temp/cachedir2CIUSERARG-Djava.util.logging.manager=com.ibm.ws.bootstrap.WsLogManager2CIUSERARG-Dserver.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv022CIUSERARG -Dcom.ibm.security.jgss.debug=off2CIUSERARG -Dcom.ibm.security.krb5.Krb5Debug=off2CIUSERARG -Xnoclassgc2CIUSERARG -Xgcpolicy:gencon2CIUSERARG -agentlib:getClasses2CIUSERARG -Dclient.encoding.override=UTF-8马宏波mahongbo@2CIUSERARG -Dfile.encoding=UTF-82CIUSERARG -Duser.timezone=GMT+82CIUSERARG -Xdump:stack:events=allocation,filter=#10m2CIUSERARG-Djava.security.auth.login.config=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/prop erties/wsjaas.conf2CIUSERARG-Djava.security.policy=/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/properties/serv er.policy2CIUSERARGmand=com.ibm.wsspi.bootstrap.WSPreLauncher -nosplash -application com.ibm.ws.bootstrap.WSLauncher com.ibm.ws.runtime.WsServer/opt/IBM/WebSphere/AppServer/profiles/AppSrv02/config jszhdd01Cell01jszhdd02Node01 AppSrv212CIUSERARG uncher=SUN_STANDARD2CIUSERARG uncher.pid=266522CIUSERARG _port_library 0x00002AAAAABCE6602CIUSERARG _org.apache.harmony.vmi.portlib 0x0000000001249C18 NULL1CIUSERLIMITS User Limits (in bytes except for NOFILE and NPROC)NULL ------------------------------------------------------------------------0SECTION MEMINFO subcomponent dump routineNULL =================================1STHEAPFREE Bytes of Heap Space Free: 1215F7001STHEAPALLOC Bytes of Heap Space Allocated: 7547F000NULL1STSEGTYPE Internal MemoryNULL segment start alloc endtype bytes1STSEGMENT 00002AAACE46B4D8 00002AAADC270A08 00002AAADC270A08 00002AAADC280A08 01000040 100001STSEGMENT 00002AAACE46B898 00002AAADC2609C8 00002AAADC2609C8 00002AAADC2709C8 01000040 10000马宏波mahongbo@1STSEGMENT 00002AAACE46B958 00002AAADC250988 00002AAADC250988 00002AAADC260988 01000040 10000NULL ------------------------------------------------------------------------0SECTION LOCKS subcomponent dump routineNULL ===============================NULL1LKPOOLINFO Monitor pool info:2LKPOOLTOTAL Current total number of monitors: 342NULL1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors):2LKMONINUSE sys_mon_t:0x00002AAABC2A3910 infl_mon_t:0x00002AAABC2A3980:3LKMONOBJECTjava/util/Timer$TimerImpl@0x00000000422E6EE0/0x00000000422E6EEC: <unowned> 3LKNOTIFYQ Waiting to be notified:3LKWAITNOTIFY "Thread-8" (0x0000000001327200)2LKMONINUSE sys_mon_t:0x00002AAABC5B5660 infl_mon_t:0x00002AAABC5B56D0:3LKMONOBJECTorg/eclipse/osgi/framework/eventmgr/EventManager$EventThread@0x00000000423D41 78/0x00000000423D4184: <unowned>3LKNOTIFYQ Waiting to be notified:3LKWAITNOTIFY "Framework Event Dispatcher" (0x00000000014F7100) 2LKMONINUSE sys_mon_t:0x00002AAABC6C6600 infl_mon_t:0x00002AAABC6C6670:3LKMONOBJECTorg/eclipse/osgi/framework/eventmgr/EventManager$EventThread@0x000000004222F7 A8/0x000000004222F7B4: <unowned>3LKNOTIFYQ Waiting to be notified:3LKWAITNOTIFY "Start Level Event Dispatcher" (0x00000000014F8100)2LKMONINUSE sys_mon_t:0x00002AAABC6C6D80 infl_mon_t:0x00002AAABC6C6DF0:马宏波mahongbo@3LKMONOBJECTorg/eclipse/core/internal/jobs/WorkerPool@0x00000000423B9128/0x00000000423B913 4: <unowned>3LKNOTIFYQ Waiting to be notified:NULL ------------------------------------------------------------------------0SECTION THREADS subcomponent dump routineNULL =================================NULL1XMTHDINFO Thread DetailsNULL ------------------NULL3XMTHREADINFO Anonymous native thread3XMTHREADINFO1 (native thread ID:0x681F, native priority: 0x0, native policy:UNKNOWN)3XMTHREADINFO3 Native callstack:4XENATIVESTACK (0x00002AAAAB06D7A2 [libj9prt24.so+0xe7a2])4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAAB06D82D [libj9prt24.so+0xe82d])4XENATIVESTACK (0x00002AAAAB06D93A [libj9prt24.so+0xe93a])4XENATIVESTACK (0x00002AAAAB06D5E4 [libj9prt24.so+0xe5e4])4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAAB06D65D [libj9prt24.so+0xe65d])4XENATIVESTACK (0x00002AAAAB069706 [libj9prt24.so+0xa706])4XENATIVESTACK (0x00002AAAAB069A5A [libj9prt24.so+0xaa5a])4XENATIVESTACK (0x00002AAAAB069B5B [libj9prt24.so+0xab5b])4XENATIVESTACK (0x00002AAAAF1C2741 [libj9dmp24.so+0x12741]) 4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAAF1BF131 [libj9dmp24.so+0xf131])4XENATIVESTACK (0x00002AAAAF1C265A [libj9dmp24.so+0x1265a]) 4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAAF1BD74A [libj9dmp24.so+0xd74a]) 4XENATIVESTACK (0x00002AAAAF1C283A [libj9dmp24.so+0x1283a]) 4XENATIVESTACK (0x00002AAAAF1B4743 [libj9dmp24.so+0x4743]) 4XENATIVESTACK (0x00002AAAAF1B7625 [libj9dmp24.so+0x7625])马宏波mahongbo@4XENATIVESTACK (0x00002AAAAF1B75FE [libj9dmp24.so+0x75fe])4XENATIVESTACK (0x00002AAAAF1B72C9 [libj9dmp24.so+0x72c9]) 4XENATIVESTACK (0x00002AAAAF1C3ABE [libj9dmp24.so+0x13abe]) 4XENATIVESTACK (0x00002AAAB038685D[libjclscar_24.so+0x4c85d])4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAB03868FB [libjclscar_24.so+0x4c8fb]) 4XENATIVESTACK (0x00002AAAAB0783A5 [libj9prt24.so+0x193a5])4XENATIVESTACK (0x00002AAAAAE520F6 [libj9thr24.so+0x40f6])4XENATIVESTACK (0x0000003B1820673D [libpthread.so.0+0x673d]) 4XENATIVESTACK clone+0x6d (0x0000003B176D3D1D[libc.so.6+0xd3d1d])NULL3XMTHREADINFO "WMQJCAResourceAdapter : DMN2"J9VMThread:0x0000000002A42B00, j9thread_t:0x00002AAAC44E6A90,java/lang/Thread:0x00000000438038B8, state:CW, prio=53XMTHREADINFO1 (native thread ID:0x6887, native priority:0x5, native policy:UNKNOWN)3XMTHREADINFO2 (native stack address rangefrom:0x00002AAABB44A000, to:0x00002AAABB48B000, size:0x41000)3XMTHREADINFO3 Java callstack:4XESTACKTRACE at java/lang/Object.wait(Native Method)4XESTACKTRACE at java/lang/Object.wait(Object.java:167)4XESTACKTRACE atcom/ibm/ejs/j2c/work/WorkScheduler.run(WorkScheduler.java:124)4XESTACKTRACE at java/lang/Thread.run(Thread.java:736)3XMTHREADINFO3 Native callstack:4XENATIVESTACK (0x00002AAAAB06D7A2 [libj9prt24.so+0xe7a2])4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAAB06D82D [libj9prt24.so+0xe82d])4XENATIVESTACK (0x00002AAAAB06D93A [libj9prt24.so+0xe93a])4XENATIVESTACK (0x00002AAAAB06D5E4 [libj9prt24.so+0xe5e4])4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])马宏波mahongbo@4XENATIVESTACK (0x00002AAAAB068E5F [libj9prt24.so+0x9e5f])4XENATIVESTACK (0x0000003B1820EB10 [libpthread.so.0+0xeb10]) 4XENATIVESTACK pthread_cond_wait+0xb9 (0x0000003B1820AEE9 [libpthread.so.0+0xaee9])4XENATIVESTACK (0x00002AAAAAE5460B [libj9thr24.so+0x660b])4XENATIVESTACK (0x00002AAAB038F6FF [libjclscar_24.so+0x556ff]) 4XENATIVESTACK java_lang_Object_wait+0x7f(0x00002AAAB0361B17 [libjclscar_24.so+0x27b17])NULL3XMTHREADINFO "ThreadManager.JobsProcessorThread.RmmThread.0"J9VMThread:0x0000000002F1DE00, j9thread_t:0x00002AAAC491C980,java/lang/Thread:0x0000000050EA4888, state:CW, prio=53XMTHREADINFO1 (native thread ID:0x68C3, native priority:0x5, native policy:UNKNOWN)3XMTHREADINFO2 (native stack address rangefrom:0x00002AAABBB0C000, to:0x00002AAABBB4D000, size:0x41000)3XMTHREADINFO3 Java callstack:4XESTACKTRACE at java/lang/Object.wait(Native Method)4XESTACKTRACE at java/lang/Object.wait(Object.java:167)4XESTACKTRACE atcom/ibm/ws/dcs/vri/common/JobsProcessorThread.run(JobsProcessorThread.java:249) 3XMTHREADINFO3 Native callstack:4XENATIVESTACK (0x00002AAAAB06D7A2 [libj9prt24.so+0xe7a2])4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAAB06D82D [libj9prt24.so+0xe82d])4XENATIVESTACK (0x00002AAAAB06D93A [libj9prt24.so+0xe93a])4XENATIVESTACK (0x00002AAAAB06D5E4 [libj9prt24.so+0xe5e4])4XENATIVESTACK (0x00002AAAAB077BF1 [libj9prt24.so+0x18bf1])4XENATIVESTACK (0x00002AAAAB06D65D [libj9prt24.so+0xe65d])4XENATIVESTACK (0x00002AAAAB068E5F [libj9prt24.so+0x9e5f])4XENATIVESTACK (0x0000003B1820EB10 [libpthread.so.0+0xeb10]) 4XENATIVESTACK pthread_cond_wait+0xb9 (0x0000003B1820AEE9 [libpthread.so.0+0xaee9])马宏波mahongbo@4XENATIVESTACK (0x00002AAAB038F6FF [libjclscar_24.so+0x556ff]) 4XENATIVESTACK java_lang_Object_wait+0x7f(0x00002AAAB0361B17 [libjclscar_24.so+0x27b17])NULLNULL ------------------------------------------------------------------------0SECTION CLASSES subcomponent dump routineNULL =================================1CLTEXTCLLOS Classloader summaries1CLTEXTCLLSS 12345678:1=primordial,2=extension,3=shareable,4=middleware,5=system,6=trusted,7=application, 8=delegating2CLTEXTCLLOADER p---st-- Loader *System*(0x00000000421B0C48)3CLNMBRLOADEDLIB Number of loaded libraries 103CLNMBRLOADEDCL Number of loaded classes 64933CLNMBRSHAREDCL Number of shared classes 33332CLTEXTCLLOADER -x--st-- Loadersun/misc/Launcher$ExtClassLoader(0x00000000422321A8), Parent*none*(0x0000000000000000)3CLNMBRLOADEDLIB Number of loaded libraries 03CLNMBRLOADEDCL Number of loaded classes 6403CLNMBRSHAREDCL Number of shared classes 12CLTEXTCLLOADER -----ta- Loadersun/misc/Launcher$AppClassLoader(0x00000000421B0F08), Parentsun/misc/Launcher$ExtClassLoader(0x00000000422321A8)3CLNMBRLOADEDLIB Number of loaded libraries 03CLNMBRLOADEDCL Number of loaded classes 343CLNMBRSHAREDCL Number of shared classes 30这样结合当时的日志文件可以找到问题产生的原因。