我正在使用以下命令创建堆转储:
jmap -dump:file=DumpFile.txt <process-id>
Run Code Online (Sandbox Code Playgroud)
我打开了生成的文件--DumpFile.txt,但它不是可读格式.所以,请让我知道如何分析生成的文件中的数据.
yve*_*ler 53
你应该jmap -heap:format=b <process-id>
没有任何路径使用.因此它创建了一个*.bin文件,您可以打开它jvisualvm.exe
(与jmap相同的路径).这是打开这种转储文件的好工具.
Nis*_*hth 36
您可以使用jhat
(Java堆分析工具)读取生成的文件:
jhat [ options ] <heap-dump-file>
Run Code Online (Sandbox Code Playgroud)
jhat命令解析java堆转储文件并启动Web服务器.jhat使您可以使用自己喜欢的webbrowser浏览堆转储.
请注意,您应该有一个hprof
二进制格式输出,以便能够解析它jhat
.您可以使用format=b
选项以此格式生成转储.
-dump:format=b,file=<filename>
Run Code Online (Sandbox Code Playgroud)
Ank*_*tal 11
很晚才回答这个问题,但值得快速看一下.只需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");
}
}
Run Code Online (Sandbox Code Playgroud)
使用jps查找vmid(虚拟机ID即JVM id)
转到CMD并键入以下命令>
C:\>jps
18588 Jps
17252 GarbageCollectionAnalysisExample
16048
2084 Main
Run Code Online (Sandbox Code Playgroud)
17252是我们需要的vmid.
现在我们将学习如何使用jmap和jhat
使用jmap - 生成堆转储
来自jss的jss文档"jmap打印给定进程或核心文件或远程调试服务器的共享对象内存映射或堆内存详细信息"
使用以下命令生成堆转储>
C:\>jmap -dump:file=E:\heapDump.jmap 17252
Dumping heap to E:\heapDump.jmap ...
Heap dump file created
Run Code Online (Sandbox Code Playgroud)
其中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.
Run Code Online (Sandbox Code Playgroud)
默认情况下,它将在端口7000上启动http服务器.然后我们将转到http:// localhost:7000 /
归档时间: |
|
查看次数: |
187415 次 |
最近记录: |