如何分析大堆转储?

时间:2011-06-01 10:42:05

标签: java heap-dump

是否有分析大型Java堆转储(2GB)的工具,如果只能为JVM分配1,5GB?我无法相信转储必须完全加载到内存中才能进行分析......

Eclipse MemoryAnalyzer失败,IBM工具也失败了。

我现在需要在这里使用命令行工具吗?

3 个答案:

答案 0 :(得分:3)

如果是dev服务器,请将最大堆大小限制为32位操作系统可以处理的内容。如果它正在生产中,需要64位操作系统!如果你无法做到这一点,你可以在服务器上运行jhat(它有一个你可以在自己的PC上访问的web界面)。

答案 1 :(得分:2)

一种解决方案是将MAT tool安装在远程服务器上,并生成分析的HTML输出,以供本地下载和查看。这样省去了尝试在远程计算机上安装X Windows并整理掉所有ssh隧道的麻烦(当然,这也是一个选择)。

首先,下载并安装独立的Eclipse RCP应用程序。然后转移到您的服务器并解压。然后确定堆转储的大小,并在必要时修改 MemoryAnalyzer.in i文件,以实例化具有足够RAM用于堆转储的JVM。

在此示例中,我有一个11GB的堆转储,并修改了最后两行(添加-Xms)

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.300.v20150602-1417
-vmargs
-Xmx16g
-Xms16g

进行初始运行以解析堆转储。这将生成中间数据,供后续运行使用,以使以后的分析更快。

./ParseHeapDump.sh /path/to/heap-dump

完成后,您可以对数据运行许多不同的分析。以下是如何搜索可疑内存泄漏的说明。

./ParseHeapDump.sh /path/to/heap-dump org.eclipse.mat.api:suspec

答案 2 :(得分:0)

不幸的是,Eclipse MAT和所有堆转储分析工具将整个堆转储加载到内存中以进行分析。如果您的Eclipse MAT失败,则可以尝试使用HeapHero工具。与Eclipse MAT相比,JHAT需要更多的内存和时间来分析堆转储。