ITPub博客

首页 > 应用开发 > Java > WEBLOGIC HEAPDUMP、JAVACORE、SNAP、GC日志分析工具和方法

WEBLOGIC HEAPDUMP、JAVACORE、SNAP、GC日志分析工具和方法

原创 Java 作者:wtjiang2008 时间:2014-03-27 16:18:38 0 删除 编辑
本文适用于IBM JDK

一、    HEAPDUMP文件分析

使用IBM heapAnalyzer工具分析heap dump文件步骤:

1.   如何产生java heap dump

JVM中对象过多, java堆( java heap)耗尽时,就会产生 java heap dump文件。另外,可以使用工具或命令显示地产生该文件。在命令行中程序执行过程中按ctrl+break可以产生,使用工具如, IBM HeapAnalyzer Sap Memory Analyzer以及 eclipse memory analyzer都可以在指定状态产生 dump文件。

2.  如何分析java heap dump 文件

使用如 java –Xmx800m –jar ha395.jar启动工具,如果启动过程中发现控制台有java.lang.OutOfMemoryError出现,可以适当加大上面的数字( 800),给予更多的空间。

然后“Open”产生的 dump文件,打开画面如下,文件很大的话需要等待一段时间

https://www.ibm.com/developerworks/mydeveloperworks/wikis/form/anonymous/api/library/ae0bef3f-d332-4fbb-9b48-b10a2fb29f72/document/4c1e6ecc-9441-4b34-b863-f0c46de196f0/attachment/087274d0-347a-4be4-9966-8d67abd529e0/media/image002.jpg

ibm heapAnalyzer工具在打开时已经进行了基本的分析,上面全部完成后,会出现如下结果:

https://www.ibm.com/developerworks/mydeveloperworks/wikis/form/anonymous/api/library/ae0bef3f-d332-4fbb-9b48-b10a2fb29f72/document/4c1e6ecc-9441-4b34-b863-f0c46de196f0/attachment/ad3cf518-324a-4014-b947-93c296620872/media/image004.png

除了显示概要结果外,还生成了一棵树。这个画面先不要关,直到你不再需要这个 dump了。

二、    JAVACORE文件分析

1.  IBM Thread and Monitor Dump Analyzer for Java工具

启动工具C:\java\bin\java –Xmx200m –jar jca13.jar

java –Xmx500m –jar jca13.jar E:/javacore.20060228.171037.2084.txt output.html

直接生成output.html   

2.  Javacore 文件产生原因

?     自动生成

     IBMJVM

?   OutOfMemory

?     手动生成

     Kill -3

3.  Javacore文件格式

     TITLE 文件头部分

     GPINFO     文件头部分

     ENVINFO    文件头部分

     MEMINFO    内存管理信息

     LOCKS 锁信息

     THREADS    线程信息

     CLASSES    类信息

TITLE部分

?     记录了引起Javadump的基本事件,时间和文件的名字

TITLE subcomponent dump routine                                                              

===============================                                                              

Dump Event "user" (00004000) received                                                         

Date:                 2011/04/02 at 00:56:01                                                 

Javacore filename:    /soft/bea/user_projects/domains/omega/javacore.20110402.005601.34176.txt

GPINFO部分

?     主要显示与操作系统方面有关的信息

0SECTION          GPINFO subcomponent dump routine

NULL              ================================

2XHOSLEVEL     OS Level         : AIX 5.3

2XHCPUS           Processors -

3XHCPUARCH       Architecture   : ppc64

3XHNUMCPUS       How Many       : 24

ENVINFO部分

?     显示在JRE级别的信息、应用服务器命令行启动信息及虚拟机的环境变量信息

ENVINFO subcomponent dump routine                                                 

=================================                                                 

J2RE 5.0 IBM J9 2.3 AIX ppc64-64 build j9vmap6423-20071007                        

VM build 20071004_14218_BHdSMr                                                    

JIT enabled - 20070820_1846ifx1_r8                                                

Running as a standalone JVM                                                        

/usr/java5_64/bin/java -Xmx3512m -Xms3512m -Xmn2450m -XX:PermSize=128m -Xmxcl25000

Java Home Dir:   /usr/java5_64/jre                                                

Java DLL Dir:    /usr/java5_64/jre/bin                                             

Sys Classpath:   /usr/java5_64/jre/lib/vm.jar;/usr/java5_64/jre/lib/core.jar;/usr/j

UserArgs:                                                                         

          -Xjcl:jclscar_23                                                         

          -Dcom.ibm.oti.vm.bootstrap.library.path=/usr/java5_64/jre/bin           

          -Dsun.boot.library.path=/usr/java5_64/jre/bin                           

          -Djava.library.path=/usr/java5_64/jre/bin:/usr/java5_64/jre/bin:/usr/java

          -Djava.home=/usr/java5_64/jre

MEMINFO部分

?     显示内存管理分配的信息,包含堆的空闲空间、当前堆的大小、垃圾收集历史

------------------------------------------------------------------------           

MEMINFO subcomponent dump routine                                                   

=================================                                                  

Bytes of Heap Space Free: 7902f578                                                 

Bytes of Heap Space Allocated: db800000                                             

                                                                                   

Internal Memory                                                                    

segment          start            alloc            end               type     bytes

000000012F2DCCB0 00000001306CB8B0 00000001306DB8A4 00000001306DB8B0  01000040 10000

000000012F2DD7F0 0000000130664FB0 0000000130674FA0 0000000130674FB0  01000040 10000

000000012F2DD130 0000000130674FD0 0000000130684FBC 0000000130684FD0  01000040 10000

<<<。。。。省略N行。。。>>>

 GC History                                                                              

 00:56:01:541818000 GMT j9mm.65 -   LocalGC end: rememberedsetoverflow=0 causedremembereds

 00:56:01:510589000 GMT j9mm.64 -   LocalGC start: globalcount=1003 scavengecount=3226 wea

 00:56:01:510033000 GMT j9mm.63 -   Set scavenger backout flag=false

LOCK 部分

?     显示的与锁有关的信息

   ----------------------------------------------------------

LOCKS subcomponent dump routine

===============================

Monitor pool info:

   Current total number of monitors: 2

Monitor Pool Dump (flat & inflated object-monitors):

   sys_mon_t:0x00039B40 infl_mon_t: 0x00039B80:

   java/lang/Integer@004B22A0/004B22AC: Flat locked by "DeadLockThread 1"

                                          (0x41DAB100), entry count 1

          Waiting to enter:

              "DeadLockThread 0" (0x41DAAD00)

   sys_mon_t:0x00039B98 infl_mon_t: 0x00039BD8:

   java/lang/Integer@004B2290/004B229C: Flat locked by "DeadLockThread 0"

                                           (0x41DAAD00), entry count 1

          Waiting to enter:

              "DeadLockThread 1" (0x41DAB100)

THREADS 部分

?     显示了所有的Java线程和栈跟踪方面的信息

 "Signal Dispatcher" TID:0x41509200, j9thread_t:0x0003659C, state:R,prio=5

(native thread ID:5820, native priority:0, native policy:SCHED_OTHER)

at com/ibm/misc/SignalDispatcher.waitForSignal(Native Method)

at com/ibm/misc/SignalDispatcher.run(SignalDispatcher.java:84)

在第一行中的属性是线程的名字、线程标识符、JVM数据结构地址、当前状态和Java优先级。

在第二行中的属性是本地操作系统的线程ID、本地操作系统的优先级及本地操作系统调试机制。

?     线程的状态可以是以下值:

?     R - Runnable – 线程在运行状态

?     CW - Condition Wait – 线程在等待状态,主要有以下原因引起的:

     调用了 sleep()

     线程在IO方面出现了阻塞。

     调用了 wait(),在等待通知。

     通过调用join()使两个线程同步。

?     MW – waiting for monitor entry 线程在等待锁。

?     S – Suspended – 另一个线程暂停当前线程。

?     Z – Zombie – 线程被杀掉。

?     P – Parked – 线程终结但还没有回收。

?     B – Blocked – 线程阻塞,它在等待获取锁

 CLASSES 部分

?     在类部分包含了类加载的概要信息和加载的类

     Application 加载器(sun/misc/Launcher$AppClassLoader),它是extension加载器的子类.

     Extension 加载器 (sun/misc/Launcher$ExtClassLoader),它是bootstrap加载器的子类。

     Bootstrap 加载器,众所周知它是系统加载器。

CLASSES subcomponent dump routine

=================================

Classloader summaries

   12345678: 1=primordial,2=extension,3=shareable,4=middleware,5=system,6=trusted,7=application,8=delegating

   p---st-- Loader *System*(0x50007498)

       Number of loaded libraries 12

       Number of loaded classes 3675

   -x--st-- Loader sun/misc/Launcher$ExtClassLoader(0x50018598), Parent *none*(0x00000000)

       Number of loaded libraries 0

       Number of loaded classes 29

   -----ta- Loader sun/misc/Launcher$AppClassLoader(0x500234C0), Parent sun/misc/Launcher$ExtClassLoader(0x50018598)

       Number of loaded libraries 3

       Number of loaded classes 11051

------省略n------

ClassLoader loaded classes

   Loader *System*(0x50007498)

       org/apache/xpath/objects/XStringForFSB(0x3E76F238)

       [Ljavax/naming/Binding;(0x3E76FAC0)

       ------省略n------

       org/apache/xpath/functions/Function3Args$Arg2Owner(0x3E770CA0)

Loader sun/misc/Launcher$AppClassLoader(0x500234C0)              

       weblogic/j2ee/descriptor/RelationshipsBean(0x38265960)         

       ------省略n------ 

       weblogic/application/descriptor/AbstractMunger$3(0x3827F278)

三、    SNAP文件分析

对跟踪文件进行格式化

跟踪格式化器(trace formatter) 是一个可以在任何平台上运行的 Java 程序,可以对来自任何平台的跟踪文件进行格式化。IBM SDK core.jar 中提供了这个格式化器,它还需要一个称为 TraceFormat.dat 的文件,其中包含格式化模板。这个文件在 jre/lib 中。可以用以下命令行启动跟踪格式化器:

java com.ibm.jvm.format.TraceFormat input_file [output_file]

在这里,com.ibm.jvm.format.TraceFormat 是跟踪格式化器类,input_file 是要进行格式化的二进制跟踪文件的名称,output_file 是可选的输出文件名。如果没有指定输出文件,那么默认的输出文件名是输入文件名加上 .fmt

四、    GC日志分析

要产生GC日志需要添加参数 -verbose:gc

1.  IBM Pattern Modeling and Analysis Tool 工具

启动工具:E:\>java -Xmx800m -jar ga439.jar

工具截图:

2.   JCONSOLE工具

可以通过JDK自带的JCONSOLE图形化工具实时监控GC情况

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/527318/viewspace-1130853/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Copy-On-Write技术
请登录后发表评论 登录
全部评论

注册时间:2008-06-30

  • 博文量
    30
  • 访问量
    192095