Java进程的转储文件分析?

时间:2010-10-07 15:03:38

标签: java debugging windbg

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

我可以(简单地)分析Java堆,对象和线程吗?

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

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

谢谢!

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:5)

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

修改

这是JDK redist ...

答案 2 :(得分:1)

Windows小型转储(.dmp)可以与以下实用程序一起使用:

    JDK中的
  1. jvisualvm实用程序可以使您同时进行线程转储和堆转储

    • 打开jvisualvm
    • Applications窗格中,找到VM Coredumps
    • 右键单击它
    • 选择Add VM Coredump...
    • 浏览到您的.dmp小型转储文件
    • OK
    • 右键单击VM Coredumps下的新项目
    • 选择Thread Dump
    • 重复Heap Dump
  2. JDK的
  3. 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
    
  4. JDK的
  5. jmap实用程序可以将Windows minidump(.dmp)转换为Java堆转储(.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
    

答案 3 :(得分:0)

NetBeans 6.9.1可以加载.hprof文件(Profile - > Load Heap Dump)。然后,例如,您可以搜索最大的对象并查看它的内部结构。