Java进程的dump文件分析?

Posted

技术标签:

【中文标题】Java进程的dump文件分析?【英文标题】:Dump file analysis of Java process? 【发布时间】:2011-04-22 10:24:16 【问题描述】:

如果我使用 Windbg 转储 Windows 上运行的 Java 进程

我可以分析(轻松吗?)Java 堆、对象和线程?

就像我可以对 .Net 进程使用 SOS 一样?

否则 - 我如何离线调试生产系统上发生的问题?

谢谢!

【问题讨论】:

【参考方案1】:

Windows minidumps (.dmp) 可以与这些实用程序一起使用:

    来自 JDK 的jvisualvm 实用程序可以为您提供线程转储和堆转储

    打开jvisualvmApplications 窗格中,找到VM Coredumps 右键单击它 选择Add VM Coredump... 浏览到您的.dmp minidump 文件 按OK 右击VM Coredumps下的新项目 选择Thread Dump 重复Heap Dump

    来自 JDK 的jstack 实用程序可以显示来自 Windows minidump (.dmp) 的 Java 堆栈

    这是一个批处理脚本:

    :: Shows java stack from Windows minidumps
    :: Argument %1: Path to minidump
    @ECHO OFF
    
    SET JDK_PATH=C:\Program Files\Java\jdk1.8.0_181\bin
    
    "%JDK_PATH%\jstack.exe" "%JDK_PATH%\java" "%~1"
    PAUSE
    

    来自 JDK 的jmap 实用程序可以将 Windows minidump (.dmp) 转换为 java heap dump (.hprof)

    这是一个批处理脚本:

    :: Converts Windows minidump to Java heap dump (.hprof)
    :: Argument %1: Path to minidump
    @ECHO OFF
    
    SET JDK_PATH=C:\Program Files\Java\jdk1.8.0_181\bin
    
    "%JDK_PATH%\jmap.exe" -F -dump:format=b,file="%~dpn1.hprof" "%JDK_PATH%\java" "%~1"
    PAUSE
    

【讨论】:

我知道这是一个旧线程,但是 - 当我尝试打开通过任务管理器(64 位 Java 进程/应用程序)创建的 DMP 文件时,我收到以下错误:“c:\Temp\ ApplicationName.DMP 不是有效的核心转储!”我已经尝试过使用 visualvm 而不是 jvisualbv,但它没有显示“VM Coredumps”选项。 嗨@BrianBooth,我从任务管理器生成了我的.dmp 文件,方法是右键单击java.exe,然后单击Create dump file。然后,我按照 Codeguard 为jvisualvm 描述的步骤进行操作,效果很好。您是否从java 进程创建了转储文件?我通过为Chrome 进程创建转储文件来重现您的错误,当我尝试在jvisualvm - VM Coredumps 下添加项目时,它告诉我chrome.DMP is not a valid core dump!【参考方案2】:

jvisualvm 可用于加载转储然后分析它

编辑:

这来自于 JDK redist...

【讨论】:

该工具可用于查看 Windows 故障转储文件 (.dmp)?我没有办法做到这一点。 @Bryan Java 堆转储;您可以在工具内转储;提供您正在监控的 JVM 状态的时间点。【参考方案3】:

有一个Java Heap Analysis Tool

【讨论】:

据我了解,它无法打开有问题描述的 windows minidumps (.dmp)【参考方案4】:

NetBeans 6.9.1 可以加载 .hprof 文件(配置文件 -> 加载堆转储)。然后,例如,您可以搜索最大的物体并查看它的内部结构。

【讨论】:

以上是关于Java进程的dump文件分析?的主要内容,如果未能解决你的问题,请参考以下文章

jitdump.dump文件怎么分析

Java 中怎么获取一份线程 dump 文件

如何手工抓取dump文件及分析

使用JMAP dump及分析dump文件

如何手工抓取dump文件

tomcat的3个线程栈dump样本分析