jmap(Memory Map for Java):生成堆转储快照。
手动jmap
jmap 的作用并不仅仅是为了获取 dump 文件,它还可以查询 finalizer 执行队列、Java 堆和永久代的详细信息,如空间使用率、当前使用的是哪种收集器等。和jinfo一样,jmap有不少功能在 Windows 平台下也是受限制的。
示例:将指定应用程序的堆快照输出到桌面。后面,可以通过 jhat、Visual VM 等工具分析该堆文件。
jmap -dump:format=b,file=./heap.hprof 19343
Dumping heap to /home/jyapp/logs/heap.hprof ...
Heap dump file created
生成的dump文件有900M,后续使用jhat分析。
自动jmap
如果不使用 jmap 命令,要想获取 Java 堆转储,可以使用 -XX:+HeapDumpOnOutOfMemoryError
参数,可以让虚拟机在 OOM 异常出现之后自动生成 dump 文件,Linux 命令下可以通过 kill -3
发送进程退出信号也能拿到 dump 文件。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}
参考资料
文档信息
- 本文作者:Bob.Zhu
- 本文链接:https://adolphor.github.io/2021/09/29/04-jvm-jmap/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)