我有一个使用以下标志运行的生产服务器:-XX:+HeapDumpOnOutOfMemoryError
昨天晚上,当我们的服务器遇到堆错误时,它生成了一个java-38942.hprof文件。事实证明,系统的开发人员知道该标志,但无法从其中获得任何有用的信息。
有什么想法吗?
发布于 2008-10-09 04:41:31
如果您想要一个相当高级的工具来做一些重要的探索工作,可以看看the Memory Analyzer project的Eclipse,它是由SAP提供的。
您可以做的一些事情对于查找内存泄漏等非常有用--包括对内存中对象运行一种形式的有限SQL (OQL)。
从com.yourcompany.somepackage.User中选择toString(firstName)
太有才了。
发布于 2008-10-09 04:17:01
您可以使用JHAT,这是JDK默认提供的Java Heap Analysis工具。它是命令行,但会启动一个web服务器/浏览器,你可以用它来检查内存。不是最友好的用户,但至少它已经安装在你要去的大多数地方。一个非常有用的视图是最底部的“堆直方图”链接。
例如:jhat -port 7401 -J-Xmx4G dump.hprof
jhat现在也可以执行OQL (底部链接"execute OQL")
发布于 2008-10-09 16:41:06
您还可以从Netbeans Profiler或Visual VM独立工具中使用HeapWalker。Visual VM是JHAT的一个很好的替代方案,因为它是独立的,但比JHAT更容易使用。
您需要Java 6+才能充分使用Visual VM。
https://stackoverflow.com/questions/185893
复制相似问题