【发布时间】:2014-04-08 06:14:20
【问题描述】:
我知道可以从 C++ 项目中转储 .dmp 文件。这个 dmp 文件可以由 Visual Studio 打开,这非常有用,因为您可以导航调用堆栈以查找变量值。
JVM也存在这种机制吗?
【问题讨论】:
我知道可以从 C++ 项目中转储 .dmp 文件。这个 dmp 文件可以由 Visual Studio 打开,这非常有用,因为您可以导航调用堆栈以查找变量值。
JVM也存在这种机制吗?
【问题讨论】:
您可以使用-XX:HeapDump JVM options。
使用以下 JVM 选项:
-XX:-HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath="/tmp"
JVM 会将堆的内容转储到指定目录中的文件中。请注意,这仅在抛出 OutOfMemoryError 时发生,因为如果 JVM 由于其他原因而崩溃,则不需要转储。
您可能还想阅读http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html 一次
【讨论】:
您可以在想要获取 JVM 转储时使用 jmap。
jmap -dump:format=b,file=/path/to/store/dumpfile jvmpid
您可以在启动时添加 JVM 选项以在 OOM 时获取 JVM 转储。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/store/dumpfile
Eclipse 内存分析器是一款快速且功能丰富的 Java 堆分析器,可帮助您发现内存泄漏并减少内存消耗。
2.使用IBM HeapAnalyzer
HeapAnalyzer 允许通过其启发式搜索引擎和分析 Java 应用程序中的 Java 堆转储来发现可能的 Java™ 堆泄漏区域。
【讨论】:
您可以远程调试(例如with Eclipse)您的 Java 应用程序,以便查看堆栈和变量内容。
或者您可以进行线程转储(例如使用jstack)。但这不包括变量。
【讨论】: