【问题标题】:How to read a Java heap dump by command line (No GUI)如何通过命令行读取 Java 堆转储(无 GUI)
【发布时间】:2014-05-25 17:47:07
【问题描述】:

我已经 ssh'ed 到一台机器并正在运行一个 java 程序。退出一段时间后,我得到一个堆转储并将其发送到文件 java_pid28356.hprof 我如何仅使用命令行工具从该文件中读取以查找导致转储的原因?

【问题讨论】:

    标签: java heap-dump


    【解决方案1】:
    less %DUMP_FILE_DIR%/java_pid28356.hprof
    

    您也可以尝试 ParseHeapDump.sh - eclipse 内存分析器的一部分(您可以用谷歌搜索它,但为了方便起见,我在下面发布了脚本)

    #!/bin/sh
    #
    # This script parses a heap dump.
    # Adjust the path to java, version 5 or later, and the heap size as required.
    # Suitable for 64-bit and 32-bit Java, but a 64-bit Java is required
    # for larger heap sizes.
    #
    # Usage: ParseHeapDump.sh <path/to/dump.dmp.zip> [report]*
    #
    # The leak report has the id org.eclipse.mat.api:suspects
    # The top component report has the id org.eclipse.mat.api:top_components
    #
    
    java -Xmx3072M -jar "`dirname "$0"`"/plugins/org.eclipse.equinox.launcher_1*.jar -consoleLog -application org.eclipse.mat.api.parse "$@"
    

    【讨论】:

    • 我已经尝试过像 less 这样的工具,它只输出文件,但它是二进制文件。这是它打印出来的内容的摘录。 @^@^@^@^Z^@^@^?_x^EunsignedEntryNames^A^@^@^@^@^@^@^@ ^@^@^?_|F P/^A^@^@^@^@^@^@^@ ^@^@^?_|Hh0^A^@^@^@^@^@^@^@ ESC^@^@^?_|F^@java/io/InputStream^A^@^@^@^@^@^@^@%^@^@^?_x^M
      pIllegal八进制转义序列^A^@^@^@^@^@^@^@.^@^@^?_|J^WPjava/util/concurrent/ThreadLocalRandom ^A^@^@^@^@^@^ @^@ ^@^@^?_|G:^A^@^@^@^@^@^@^@ ^@^@^?_|G&lt;FF&gt;&lt;F0&gt;;^A^@^@^@^@^@^@^@ ^@^@^?_|Gz0&lt;^A^@^@^@^@^@^@^@^U^@^@^?_|FESCgetAndAddLong^A^@^@^@^@
    • 你期待什么?如果您知道要寻找什么就足够了。如果您觉得幸运,可以尝试我建议的第二个选项。
    • 我希望有类似 GUI 制作的东西。类似于由字符串、整数等组成的堆的百分比。
    猜你喜欢
    • 2012-02-07
    • 2019-05-14
    • 2016-01-10
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多