0、写在前面
我是使用win环境来熟悉jmap命令,64为的win10系统
1、jmap介绍
JVM Memory Map
命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap(堆),以二进制输出成文本。
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
看下文档帮助
C:\Users\wenwen>jmap -help
Usage:
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)//连接到远程调试服务器
where <option> is one of://<参数>其中之一
<none> to print same info as Solaris pmap
//打印与“SUN微系统公司开发的一种网络操作系统”pamp相同的信息
-heap to print java heap summary
//打印java堆总结
-histo[:live] to print histogram of java object heap; if the "live"
suboption is specified, only count live objects
//打印java堆对象柱状图;如果有"live"子选项,则仅把存活对象算入柱状图
-clstats to print class loader statistics
//打印类加载统计
-finalizerinfo to print information on objects awaiting finalization
//打印对象等待终结信息
-dump:<dump-options> to dump java heap in hprof binary format
//转存java堆信息用hprof二进制形式
dump-options://子选项,转储参数
live dump only live objects; if not specified,
all objects in the heap are dumped.
//仅转储存活队形;如果不指定所有对象都转储
format=b binary format
//二进制形式
file=<file> dump heap to <file>
//转储堆到文件地址
Example: jmap -dump:live,format=b,file=heap.bin <pid>
//例子
-F force. Use with -dump:<dump-options> <pid> or -histo
to force a heap dump or histogram when <pid> does not
respond. The "live" suboption is not supported
in this mode.
//强制。使用-dump或-histo去强行一个堆转储或柱状图当pid不能响应。不支持“live”子选项在这个模型
-h | -help to print this help message//答应这个命令帮助
-J<flag> to pass <flag> directly to the runtime system
//通过flag直接发送到运行时系统
2、如何找到pid
我这里使用了Java提供的另一个命令jps:显示当前所有java进程pid的命令。我的跑的程序的名字为“LifeBlogApplication”,所以进程ID为106180
3、jmap -heap
jmap -heap 106180
4、jmap -dump:
可以找分析工具分析这个文件,这里使用jhat。
注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存,即jhat -J-Xmx512m -port 9998 /tmp/dump.dat。
打开服务页面
在最下面
- 显示出堆中所包含的所有的类
- 从根集能引用到的对象
- 显示平台包括的所有类的实例数量(包含)
- 显示平台包括的所有类的实例数量(排除)
- 堆实例的分布表
躬身自省,淳朴而谦逊否——文文的博客
前辈见之,如有问题,麻烦留言斧正。