如何在Java中使用JMAP分析堆转储(How to analyse the heap dump u

2019-07-20 17:31发布

我使用下面的命令来创建堆转储:

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

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

Answer 1:

你应该使用jmap -heap:format=b <process-id>没有任何路径。 因此,它会创建一个* .bin文件,你可以用打开jvisualvm.exe (如JMAP相同的路径)。 这是开这样转储文件一个伟大的工具。



Answer 2:

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

jhat [ options ] <heap-dump-file>

该命令与jHat解析Java堆转储文件并启动Web服务器。 能够与jHat您在使用自己喜欢的网页浏览器来浏览堆转储。

需要注意的是,你应该有一个hprof二进制格式输出能够与解析它jhat 。 您可以使用format=b选项来生成这种格式的转储。

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


Answer 3:

很晚回答这个问题,但值得采取快速看一下。 需要仅有2分钟的详细了解。

首先创建这个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 IE JVM ID)

去CMD和下面键入命令>

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

17252是我们所需要的VMID。

现在,我们将学习如何使用JMAP和与jHat

使用JMAP - 产生堆转储

从约JMAP Java文档“打印JMAP共享对象存储地图或一个给定的处理的堆内存细节或核心文件或远程调试服务器”

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

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

其中17252是VMID(从上面拾取)。

堆转储将在电子商务产生:\ 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://本地主机:7000 /

礼貌: JMAP , 如何监测和10种分析垃圾收集



Answer 4:

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

另一种选择是使用JVisualVM,它可以读取(创造)堆转储的欢迎,并附带每JDK。 您可以在JDK的bin目录中找到它。



Answer 5:

VisualVM的不来与苹果的JDK。 您可以使用VisualVM的Mac的应用程序包(DMG)作为一个单独的应用程序,以补偿。



Answer 6:

MAT,JProfiler的,是与jHat可能的选择。 因为与jHat自带的JDK,您可以轻松地启动它做一些基本的分析。 看一下这个



文章来源: How to analyse the heap dump using jmap in java
标签: java jmap