我有一台生产服务器,运行以下标记:-XX:+HeapDumpOnOutOfMemoryError
昨晚当我们的服务器遇到堆错误时,它生成了一个名为java-38942.hprof的文件。原来该系统的开发人员知道这个标记,但不知道如何从中获得任何有用信息。
有什么想法吗?
我有一台生产服务器,运行以下标记:-XX:+HeapDumpOnOutOfMemoryError
昨晚当我们的服务器遇到堆错误时,它生成了一个名为java-38942.hprof的文件。原来该系统的开发人员知道这个标记,但不知道如何从中获得任何有用信息。
有什么想法吗?
你可以做的一些事情非常惊人,比如找到内存泄漏等 -- 包括对内存中的对象运行一种类型的限制SQL(OQL),即
SELECT toString(firstName) FROM com.yourcompany.somepackage.User
绝对是一个杰出的工具.
jhat -port 7401 -J-Xmx4G dump.hprof
jhat
现在也可以执行OQL(底部链接“执行OQL”)。java.io.IOException: Version string not recognized at byte 17
- Dr.jacky您还可以使用Netbeans Profiler的HeapWalker或Visual VM独立工具。与JHAT相比,Visual VM是一个很好的替代品,因为它是独立的,并且比JHAT更易于使用。
您需要Java 6+才能充分使用Visual VM。
JAVASDK/bin
文件夹中查找jvisualvm.exe
即可。 - xxxvodnikxxx请获取Eclipse内存分析器。这是目前最好的免费工具。
JHAT只适用于"玩具应用程序"。
YourKit Java Profiler 似乎也可以处理它们。
该库速度快,但您需要用Java编写自己的分析代码。
从文档中了解到:
操作
选项卡中写入“分析器”。
选择带有图标的“分析器”行。
然后点击打开快照..
按钮。
Error opening heap dump 'strictmode-death-penalty.hprof'. Check the error log for further details. Error opening heap dump 'strictmode-death-penalty.hprof'. Check the error log for further details. Unknown HPROF Version (JAVA PROFILE 1.0.3) (java.io.IOException) Unknown HPROF Version (JAVA PROFILE 1.0.3)
- Dr.jacky