Java进程的转储文件分析?

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

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

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

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

谢谢!

有一个Java堆分析工具

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

编辑:

这是JDK redist …

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

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

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

    • 打开jvisualvm
    • 在“ Applications窗格中,找到VM Coredumps
    • 右键单击它
    • 选择Add VM Coredump...
    • 浏览到.dmp minidump文件
    • OK
    • 右键单击VM Coredumps下的新项
    • 选择Thread Dump
    • 重复Heap Dump
  2. JDK的jstack实用程序可以显示来自Windows minidumps(.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 
  3. JDK的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