利用jmap命令查看JVM内存使用详情
介绍
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。它的用途是为了展示java进程的内存映射信息,或者堆内存详情。
可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
jmap命令:
jmap [option] <pid>
(to connect to running process) 连接到正在运行的进程
jmap [option] <executable <core>
(to connect to a core file) 连接到核心文件
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server) 连接到远程调试服务
参数说明
pid: 目标进程的PID,进程编号,可以采用ps -ef | grep java 查看java进程的PID;
executable: 产生core dump的java可执行程序;
core: 将被打印信息的core dump文件;
remote-hostname-or-IP: 远程debug服务的主机名或ip;
server-id: 唯一id,假如一台主机上多个远程debug服务;
如果使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。
option参数使用
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
-F 强迫.在pid没有响应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
-h | -help 打印辅助信息
-J<flag> 传递参数给jmap启动的jvm.
简单例子说明
通过jmap -dump:format=b,file=jmap.txt 26937将日志文件打印到文本中,可以看到当前目录下多了一个日志文件
利用MemoryAnalyzer软件打开日志文件,即可看到相关信息。如图所示
MemoryAnalyzer软件的使用说明请自行查阅