如何使用Heap Analyzer生成和分析IBM Java Heapdump?

来源:互联网 发布:php长连接 消息推送 编辑:程序博客网 时间:2024/06/06 16:29

 IBM Java 和 Sun Java支持的第三方工具不太一样,在AIX 服务器上只能安装IBM JAVA,那么当我们运行的Java程序出现可疑的内存泄漏,该如何诊断呢?

一、什么是heapdump

   HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析。

二、如何生成Heapdump:

    1. 设置参数

         export IBM_HEAPDUMP=true
         export IBM_HEAPDUMPDIR=/tmp/java

     2. 找出正在运行的java 进程。

        通过ps -ef 找出进程号,比如如下的例子找出运行HellowWorld Java程序的进程号

# ps -ef | grep -i java ucdaxxx  8388616        1   0   Apr 22      -  1:07 /usr/java8_64/bin/java -Dfile.encoding=UTF-8 -jar /opt/xxx/ibm-ucdagent/monitor/air-monitor.jar /opt/urbancode/ibm-ucdagent /opt/urbancode/ibm-ucdagent/bin/worker-args.conf 7000pcoxxxe  9764918  9240722   0   Apr 22      -  1:17 /usr/java6/bin/java -Xmx512m -Xms20m -Xscmx10m -Xshareclasses -Xbootclasspath/p:/usr/java6/jre/lib/ibmjsseprovider2.jar -Dfile.encoding=UTF-8 -Xbootclasspath/a:/pconsole/lwi/runtime/core/eclipse/plugins/com.ibm.rcp.base_6.2.3.20110824-0615/rcpbootcp.jar:/pconsole/lwi/lib/ISCJaasModule.jar:/pconsole/lwi/lib/com.ibm.logging.icl_1.1.1.jar:/pconsole/lwi/lib/jaas2zos.jar:/pconsole/lwi/lib/jaasmodule.jar:/pconsole/lwi/lib/lwidiag.jar:/pconsole/lwi/lib/lwinative.jar:/pconsole/lwi/lib/lwinl.jar:/pconsole/lwi/lib/lwirolemap.jar:/pconsole/lwi/lib/lwisecurity.jar:/pconsole/lwi/lib/lwitools.jar:/pconsole/lwi/lib/passutils.jar -Xverify:none -cp eclipse/launch.jar:eclipse/startup.jar:/pconsole/lwi/runtime/core/eclipse/plugins/com.ibm.rcp.base_6.2.3.20110824-0615/launcher.jar com.ibm.lwi.LaunchLWIucdaxxt 10944596  8388616   0   Apr 22      -  2:54 /usr/java8_64/jre/bin/java -Dcom.urbancode.air.mw.common.Monitor.port=3xxx -Xmx256m -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 -Djava.io.tmpdir=/opt/urbancode/ibm-ucdagent/var/temp -Djava.security.properties=/opt/urbancode/ibm-ucdagent/conf/agent/java.security -jar /opt/urbancode/ibm-ucdagent/monitor/air-worker.jar /opt/urbancode/ibm-ucdagent/bin/classpath.conf 5000 com.urbancode.air.agent.AgentWorker    root 15728718 13304018   0 06:10:47  pts/2  0:00 grep -i javaa1inxxx 24576212 22937816   5 06:10:35  pts/0  0:01 /home/a1insctp/sqllib/java/jdk64/bin/java HelloWorld

    3. 给 JVM发一个SIGQUIT的信号

             For Windows:  press CTRL+BREAK

             For Linux/Unix: Use kill -3 or CTRL+|  注: kill -3 不会真正杀掉此进程,

             下面我们通过kill -3来发送SIGQUIT信号

# kill -3 24576212

      4. 检查 IBM_HEAPDUMPDIR 目录

# ls -atlrtotal 936-rw-r--r--    1 a1insctp db2iadm1          0 May 10 02:57 aa.txtdrwxrwxrwx    2 root     system          256 May 10 06:14 .-rw-r--r--    1 a1insctp db2iadm1      82671 May 10 06:14 heapdump.20170510.061428.24576212.0001.phd

三、如何分析Heapdump

   1. 下载IBM HeapAnalyzer工具.

          就是一个HAxxx.jar包。 (xxx为版本号,比如目前下载链接下载的就是har456.jar)

         https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

    2. 运行HeapAnalyzer

          Java -jar har456.jar

    3. 在HeapAnalyzer的图形化界面打开第二步声称的heapdump文件,进行分析:

        具体如何分析:请参考http://www-01.ibm.com/support/docview.wss?uid=swg27006624&aid=1



0 0
原创粉丝点击