首页 课程 师资 教程 报名

各种环境下Javacore与heapdump生成大法

  • 2019-08-22 11:13:58
  • 3183次 动力节点

  JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。


  它是一个文本文件,打开后可以看到每一个线程的执行栈,以stacktrace的显示。


  通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。


  HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。


  这种文件需要相应的工具进行分析,如IBMHeapAnalyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。


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


  JAVACORE篇:


  WINDOWS平台:


  ORACLEJDK: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.exepid即可生成。


  4.ctrl+break按键


  在Windows上启动程序的时候,可以直接在启动NC的窗口按组合键生成javacore。


  然而由于NC涉及到两个java进程,一个小的导程序,一个是正式的程序。


  所以用该方法只能生成引导程序的javacore。看不到生产环境的实际快照。


  IBMJDK: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->Javadumpsandcores。

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平台:


  ORACLEJDK:HOTSPOT


  1.jvisualvm工具。


  和之前生成javacore的方法类似。


 image.png

  2.jmap方法。


  jmap方法为JDK自带的方法。通过命令行的方式生成。


  jmap-dump:file=path_to_filepid如jmap-dump:file=d:4。


  3.系统宕机自动生成。


  由于oracle的JDK在宕机的时候,不会自动生成heapdump文件。


  需要我们通过添加JVM参数的方式来显示申明。


  在JVM参数中加-XX:+HeapDumpOnOutOfMemoryError。


  4.通过windows任务管理器。


  windows的任务管理器可以直接将java的堆对象全部转储出来。


  只需要点击右键进行保存即可。保存后的文件需要通过类似IBM的MAT分析工具打开。

image.png

  IBMJDK: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的收集方法。


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交