各种环境下JAVACORE与HEAPDUMP生成大法

JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。
它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。
通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。

HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。
这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。

在NC的项目上我们经常要生成javacore和heapdump来进行分析。这里总结一下我自己在NC项目上生成这两个文件的方法。

JAVACORE篇:

WINDOWS平台:

ORACLE JDK:HOTSPOT

1.jvisualvm工具。
          jvisualvm是sun的JDK中自带的工具,在java_home/bin/jvisualvm.exe中就可以打开。
挂在到对应的java进程后,可以直接生javacore。


image.png

2.jstack工具。
          jstack为JDK自带的命令行工具。可以通过jstack -l -r -pid的方式生成对应的javacore。
其中-l -r 可以显示出详细信息,锁信息等。
        3.sendsignal工具。
          sendsignal工具是老外开发的一个小工具,用来生成已知进程号的java进程的javacore。
附件中有具体工具。通过sendsignal.exe pid即可生成。
        4.ctrl+break按键
          在Windows上启动程序的时候,可以直接在启动NC的窗口按组合键生成javacore。
然而由于NC涉及到两个java进程,一个小的导程序,一个是正式的程序。
所以用该方法只能生成引导程序的javacore。看不到生产环境的实际快照。

IBM JDK:V9

1.系统宕机自动生成。
          IBM的JDK在系统宕机的时候会自动生成javacore,这也是我们经常用该JDK替换默认的缘故。
        2.sendsignal工具。
        3.ctrl+break组合键。
        4.NMC控制台。
          NC自带的监控工具NMC可以直接点击对应server,右键直接生成javacore。
该工具只针对于Websphere集群生效。对于单机 websphere或者NC中间件不生效。


image.png

5.Websphere控制台。
          有的时候我们发现,系统卡死,或者需要同时生成多个Server的javacore的时候,
我们就需要在websphere的控制台中直接生成。生成方式为Troubleshooting->Java dumps and cores。


image.png

5.JSP小补丁程序。         
          该程序是自己编写的jsp小程序。
使用方式为,将javacore.jsp放置到nchome/hotwebs/nc_web下即可,重启生效。
访问的时候,通过ip地址+端口+javacore.jsp即可在JAVA_HOME中生成。
如127.0.0.1:9081/javacore.jsp。补丁在附件中。
          主要调用IBM的JDK内部方法com.ibm.jvm.Dump.JavaDump();

LINUX平台:

1.kill -3 -pid
          在linux平台上,除了之前的各种方法之外,可以直接调用系统的kill -3方法。       
  
HEAPDUMP篇:

WINDOWS平台:

ORACLE JDK:HOTSPOT

1.jvisualvm工具。
          和之前生成javacore的方法类似。


image.png

2.jmap方法。
          jmap方法为JDK自带的方法。通过命令行的方式生成。
jmap -dump:file=path_to_file pid 如jmap -dump:file=d:\ 2234。
        3.系统宕机自动生成。
          由于oracle的JDK在宕机的时候,不会自动生成heapdump文件。
需要我们通过添加JVM参数的方式来显示申明。
在JVM参数中 加-XX:+HeapDumpOnOutOfMemoryError。
        4.通过windows任务管理器。
          windows的任务管理器可以直接将java的堆对象全部转储出来。
只需要点击右键进行保存即可。保存后的文件需要通过类似IBM的MAT分析工具打开。


image.png

IBM JDK:V9

1.系统宕机自动生成。
        2.利用coredump功能。
          利用websphere自带的coredump功能,可以将所有宕机时的堆栈信息全部输出。
包含堆中对象的具体信息,如hashmap中的键值都可以看到具体的值。
是跟踪宕机问题的终极法宝。
具体方法为,在JVM中添加参数: - -Xdump:system:events=user,request=exclusive+prewalk+compact
        3.JSP小补丁程序。
          该程序是自己编写的jsp小程序。
使用方式为,将heapdump.jsp放置到nchome/hotwebs/nc_web下即可,重启生效。
访问的时候,通过ip地址+端口+heapdump.jsp即可在JAVA_HOME中生成。
如127.0.0.1:9081/heapdump.jsp。补丁在附件中。
          主要调用IBM的JDK内部方法com.ibm.jvm.Dump.HeapDump();

LINUX平台:

和上面的生成方法没有太大区别。

以上为目前我总结的所有关于javacore和heapdump的收集方法。
在搜集项目报错信息以及定位问题的时候非常关键。


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 参数设置 在Java虚拟机的参数中,有3种表示方法用“ps -ef |grep "java"命令,可以得到当前Ja...
    九问阅读 9,190评论 2 52
  • JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理。冯·诺依曼体系结构中,指出计算机处理的数据和指...
    Java架构师Carl阅读 3,414评论 0 108
  • 秋雨绵绵,秋雨绵绵...... 秋意一天深似一天 身边尽是纷飞的落叶 我把光阴过滤了一遍一遍 开始坐下来 写一首不...
    金永辉煌阅读 621评论 17 16
  • 我两个好朋友谈恋爱了 男性朋友是真的喜欢我的女性朋友但是我的女性朋友不喜欢我的男性朋友,她只是依赖她。说实话,我是...
    霃隰阅读 262评论 0 0