代码之家  ›  专栏  ›  技术社区  ›  Nick Stinemates

如何分析.hprof文件?

  •  182
  • Nick Stinemates  · 技术社区  · 16 年前

    我的生产服务器运行时带有以下标志: xx:+堆转储自动故障存储器错误

    昨晚,当我们的服务器遇到堆错误时,它生成了一个java-38942.hprof文件。结果表明,系统的开发人员知道这个标志,但没有办法从中获得任何有用的信息。

    有什么想法吗?

    6 回复  |  直到 6 年前
        1
  •  185
  •   Cowan    16 年前

    如果你想要一个相当先进的工具来做一些严肃的调查,看看 the Memory Analyzer project 在Eclipse上,SAP为他们做出了贡献。

    您所能做的一些工作是惊人地有助于发现内存泄漏等——包括针对内存中的对象运行一种形式的有限SQL(OQL),即。

    从com.yourcompany.somepackage.user中选择to字符串(firstname)

    太棒了。

        2
  •  50
  •   rogerdpack    7 年前

    你可以使用 JHAT Java堆分析工具默认使用JDK提供。它是命令行,但启动用于检查内存的Web服务器/浏览器。不是最容易使用的,但至少它已经安装了大多数你要去的地方。一个非常有用的视图是最底部的“堆柱状图”链接。

    前任: jhat -port 7401 -J-Xmx4G dump.hprof

    jhat 也可以执行oql“these days”(底部链接“执行oql”)。

        3
  •  31
  •   moxi    8 年前

    您也可以使用 HeapWalker 从NetBeans分析器或 Visual VM 独立工具。VisualVM是JHAT的一个很好的替代品,因为它是独立的,但比JHAT更容易使用。

    您需要Java 6 +充分使用Visual VM。

        4
  •  10
  •   kohlerm    16 年前

    只要得到 Eclipse Memory Analyzer . 没有比这更好的了,它是免费的。

    JHAT只能用于“玩具应用”

        5
  •  7
  •   Polaris    14 年前

    YouKIT Java探查器似乎也在处理它们。

        6
  •  1
  •   Andrejs    6 年前

    如果要对堆转储进行自定义分析,则有:

    这个库很快,但是你需要用Java编写你的分析代码。

    来自文档:

    • 不在磁盘上创建任何临时文件来处理堆转储
    • 可以直接使用gz压缩堆转储
    • 堆路径表示法