如何在java中使用jmap分析堆转储

我正在使用下面的命令创build堆转储:

jmap -dump:file=DumpFile.txt <process-id> 

我已经打开生成的文件 – DumpFile.txt,但它不是可读的格式。 所以,请让我知道如何分析生成的文件中的数据。

你应该使用没有任何path的jmap -heap:format=b <process-id> 。 因此它会创build一个* .bin文件,您可以使用jvisualvm.exe (与jmap相同的path)打开该文件。 这是一个很好的工具来打开这样的转储文件。

您可以使用jhat (Java堆分析工具)来读取生成的文件:

 jhat [ options ] <heap-dump-file> 

jhat命令parsing一个java堆转储文件并启动一个web服务器。 jhat使您能够使用您最喜爱的浏览器浏览堆转储。

请注意,你应该有一个hprof二进制格式输出,以便能够parsing它与jhat 。 您可以使用format=b选项以这种格式生成转储。

 -dump:format=b,file=<filename> 

如果你使用Eclipse作为IDE,我会推荐优秀的eclipse插件内存分析器

另一个select是使用JVisualVM,它也可以读取(和创build)堆转储,并随每个JDK一起提供。 您可以在您的JDK的bin目录中find它。

VisualVm不附带Apple JDK。 您可以使用VisualVM Mac应用程序包(dmg)作为单独的应用程序来弥补这一点。

答案很晚,但值得一看。 只需2分钟就能详细了解。

首先创build这个Java程序

 import java.util.ArrayList; import java.util.List; public class GarbageCollectionAnalysisExample{ public static void main(String[] args) { List<String> l = new ArrayList<String>(); for (int i = 0; i < 100000000; i++) { l = new ArrayList<String>(); //Memory leak System.out.println(l); } System.out.println("Done"); } } 

使用jps查找vmid(虚拟机ID即JVM id)

转到CMD并键入下面的命令>

 C:\>jps 18588 Jps 17252 GarbageCollectionAnalysisExample 16048 2084 Main 

17252是我们需要的vmid。

现在我们将学习如何使用jmap和jhat

使用jmap – 生成堆转储

从关于jmap的java文档“jmap打印给定进程或核心文件或远程debugging服务器的共享对象内存映射或堆内存详细信息”

使用以下命令生成堆转储>

 C:\>jmap -dump:file=E:\heapDump.jmap 17252 Dumping heap to E:\heapDump.jmap ... Heap dump file created 

其中17252是从上面挑选的vmid。

堆转储将在E:\ heapDump.jmap中生成

现在使用Jhat Jhat用于分析java中的垃圾收集转储 –

 C:\>jhat E:\heapDump.jmap Reading from E:\heapDump.jmap... Dump file created Mon Nov 07 23:59:19 IST 2016 Snapshot read, resolving... Resolving 241865 objects... Chasing references, expect 48 dots................................................ Eliminating duplicate references................................................ Snapshot resolved. Started HTTP server on port 7000 Server is ready. 

默认情况下,它将在端口7000上启动http服务器。然后我们将转到http:// localhost:7000 /

礼貌: JMAP , 如何用10种方式监控和分析垃圾回收

MAT,jprofiler,jhat是可能的select。 因为jhat自带jdk,你可以轻松启动它来做一些基本的分析。 看一下这个