Jmap
常见用途
- 生成JVM堆的dump文件
- 查看finalize执行队列
- 查看Java堆和方法区的详细信息
常用指令
jmap [option] <pid>
jmap [option] <executable <core>
jmap [option] [server_id@]<remote server IP or hostname>
- 指令一为jmap最常用指令,以进程id为入参查询相关信息,后续相关参数都以该指令做演示
- 指令二为查询core dump文件相关信息
- 指令三为查询远程服务,考虑到真实生产中的环境隔离,因此此指令也很少使用
命令参数说明:
- pid:java进程ID
linux系统中可用ps命令查询
Windows系统中可用jps命令查询
- option:jmap命令的核心参数,接下去详细讲解可选参数
option可选参数
-heap
展示Java堆信息详情,包含以下内容:
- GC使用的算法
- heap(堆)的配置信息
- JVM堆内存的使用情况
- 分代情况
- 每个代的总容量、已使用、可使用内存
-histo:[:live]
展示了Java Heap中对象的统计信息,包括了:
- 对象的数量
- 占用内存的大小
- 类的全类名
此外,加上live参数,则只展示活动的对象
-clstats
展示元空间的类加载器信息
-finalizeinfo
展示正在等待Finalizer线程执行finalize方法的对象(及等待回收的对象)信息
-dump:< dump-options>
- live:可选,是否只展示活动对象
- format=b:表示以hprof二进制格式转储java的heap信息
- file=:转储快照文件的名称
生成的dump文件可以通过分析工具进行解析,常用的包括jdk自带的jvisualvm,或者jconsole
-F
强制模式,在pid无响应时使用,一般搭配-dump或者-histo参数,此模式下,live自参数无效
-h | -help
显示帮助信息