如何分析.hprof文件?

我有一个生产服务器与以下标志运行: – XX:+ HeapDumpOnOutOfMemoryError

昨天晚上,当我们的服务器遇到堆错误时,它生成了一个java-38942.hprof文件。 事实certificate,该系统的开发人员知道的国旗,但没有办法从它得到任何有用的信息。

有任何想法吗?

如果你想要一个相当先进的工具来做一些周到的事情,可以看一下Eclipse上的Memory Analyzer项目 ,由SAP提供。

你可以做的一些事情对于查找内存泄漏等是非常好的 – 包括对内存对象运行一种有限的SQL(OQL)forms,即

SELECT toString(firstName)FROM com.yourcompany.somepackage.User

非常辉煌。

您可以使用JHAT ,这是JDK默认提供的Java堆分析工具。 它是命令行,但启动了一个Web服务器/浏览器,用来检查内存。 不是用户最友好的,但至less已经安装了大部分地方。 一个非常有用的视图是最底层的“堆直方图”链接。

例如: jhat -port 7401 -J-Xmx4G dump.hprof.map

您也可以使用Netbeans Profiler或Visual VM独立工具中的HeapWalker 。 Visual VM是JHAT的一个很好的select,因为它是独立的,但比JHAT更容易使用。

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

只要拿到Eclipse内存分析器 。 没有什么比这更好的了,它是免费的。

JHAT只能用于“玩具应用”

YourKit Java Profiler似乎也处理它们。