JAVACORE与HEAPDUMP生成方法

 更新时间:2024年08月14日 10:36:11   作者:Z.Virgil  
JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上,它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示,本文介绍JAVACORE与HEAPDUMP生成大法,感兴趣的朋友跟随小编一起看看吧

前言

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

JAVACORE篇:

JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。

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

Windows平台:

ORACLE JDK:HOTSPOT

1.jvisualvm工具

jvisualvm是sun的JDK中自带的工具,在java_home/bin/jvisualvm.exe中就可以打开。

挂在到对应的java进程后,可以直接生javacore。

2.jstack工具

jstack为JDK自带的命令行工具。

可以通过jstack -l -r -pid的方式生成对应的javacore。

其中-l -r 可以显示出详细信息,锁信息等。

3.sendsignal工具

sendsignal工具是老外开发的一个小工具,用来生成已知进程号的java进程的javacore。

附件中有具体工具。通过sendsignal.exe pid即可生成。

4.ctrl+break按键

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

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

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

IBM JDK:V9

1.系统宕机自动生成。

IBM的JDK在系统宕机的时候会自动生成javacore,这也是我们经常用该JDK替换默认的缘故。

2.sendsignal工具。

3.ctrl+break组合键。

4.NMC控制台。(内部监控工具)

某产品自带的监控工具NMC可以直接点击对应server,右键直接生成javacore。

该工具只针对于Websphere集群生效。对于单机 websphere或者NC中间件不生效。

5.Websphere控制台

有的时候我们发现,系统卡死,或者需要同时生成多个Server的javacore的时候,

我们就需要在websphere的控制台中直接生成。

生成方式为Troubleshooting->Java dumps and cores。

6.JSP小补丁程序。         

使用方式为,将javacore.jsp放置到nchome/webapps/nc_web下即可,重启生效。

访问的时候,通过ip地址+端口+javacore.jsp即可在JAVA_HOME中生成。

如127.0.0.1:9081/javacore.jsp。代码如下

<%com.ibm.jvm.Dump.JavaDump();%>

主要调用IBM的JDK内部方法com.ibm.jvm.Dump.JavaDump();

LINUX平台:                  

1.kill -3 -pid

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

HEAPDUMP篇:

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

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

Windows平台:

ORACLE JDK:HOTSPOT

1.jvisualvm工具。

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

2.jmap方法。

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

<%
com.ibm.jvm.Dump.JavaDump();
%>

3.系统宕机自动生成。

由于oracle的JDK在宕机的时候,不会自动生成heapdump文件。需要我们通过添加JVM参数的方式来显示申明。

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

4.通过windows任务管理器。

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

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

IBM JDK:V9

1.系统宕机自动生成。

2.利用coredump功能。

利用websphere自带的coredump功能,可以将所有宕机时的堆栈信息全部输出。

包含堆中对象的具体信息,如hashmap中的键值都可以看到具体的值。

是跟踪宕机问题的终极法宝。

具体方法为,在JVM中添加参数
-Xdump:system:events=user,request=exclusive+prewalk+compact

3.JSP小补丁程序。

使用方式为,将heapdump.jsp放置到nchome/webapps/nc_web下即可,重启生效。

访问的时候,通过ip地址+端口+heapdump.jsp即可在JAVA_HOME中生成。

如127.0.0.1:9081/heapdump.jsp。代码如下

<%
com.ibm.jvm.Dump.HeapDump();
%>

主要调用IBM的JDK内部方法com.ibm.jvm.Dump.HeapDump();

LINUX平台:

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

以上为目前我总结的所有关于javacore和heapdump的收集方法。

在搜集项目报错信息以及定位问题的时候非常关键。

到此这篇关于JAVACORE与HEAPDUMP生成大法的文章就介绍到这了,更多相关JAVACORE与HEAPDUMP生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java报错:Java.io.FileNotFoundException解决方法

    Java报错:Java.io.FileNotFoundException解决方法

    这篇文章主要介绍了Java.io.FileNotFoundException的产生原因和解决方法,造成这个报错的原因可能有文件路径错误、文件被删除或移动和权限问题,文中将解决的办法介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • SpringCloud中的Ribbon负载均衡器详细解析

    SpringCloud中的Ribbon负载均衡器详细解析

    这篇文章主要介绍了SpringCloud中的Ribbon负载均衡器详细解析,Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现,通过封装可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用,需要的朋友可以参考下
    2024-01-01
  • Java 对HashMap进行排序的三种常见方法

    Java 对HashMap进行排序的三种常见方法

    这篇文章主要介绍了Java 对HashMap进行排序的三种常见方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • Java串口通信入门

    Java串口通信入门

    串口通信是一种用于在计算机和外部设备之间进行数据交换的通信方式,本文主要介绍了Java串口通信入门,并提供一个简单的示例来演示如何在Java中进行串口通信,感兴趣的可以了解一下
    2023-11-11
  • Python学习之书写格式及变量命名

    Python学习之书写格式及变量命名

    这篇文章我们给大家总结了关于Python书写格式及变量命名,小编觉得这篇文章写的还不错,有兴趣的朋友跟着参考学习下,希望能够给你带来帮助
    2021-10-10
  • Java代码里如何拼接SQL语句到mybatis的xml

    Java代码里如何拼接SQL语句到mybatis的xml

    这篇文章主要介绍了Java代码里拼接SQL语句到mybatis的xml操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 关于SpringBoot改动后0.03秒启动的问题

    关于SpringBoot改动后0.03秒启动的问题

    这篇文章主要介绍了SpringBoot改动后0.03秒启动,本文结合示例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Spring和Hibernate的整合操作示例

    Spring和Hibernate的整合操作示例

    这篇文章主要介绍了Spring和Hibernate的整合操作,结合实例形式详细分析了Spring和Hibernate的整合具体步骤、实现方法及相关操作注意事项,需要的朋友可以参考下
    2020-01-01
  • 使用AbstractRoutingDataSource实现数据源动态切换的实例

    使用AbstractRoutingDataSource实现数据源动态切换的实例

    AbstractRoutingDataSource 是 Spring 框架提供的一个抽象类,用于实现动态数据源路由,这个类主要用于多数据源场景,其中可以根据不同的条件动态地切换到不同的数据源,本文给大家介绍了如何使用AbstractRoutingDataSource实现数据源动态切换,需要的朋友可以参考下
    2024-03-03
  • spring中aop的xml配置方法实例详解

    spring中aop的xml配置方法实例详解

    AOP的配置方式有2种方式:xml配置和AspectJ注解方式。下面这篇文章主要给大家介绍了关于spring中aop的xml配置方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07

最新评论