利用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软件的使用说明请自行查阅

posted @ 2020-03-22 15:34  遗失的岁月  阅读(565)  评论(0编辑  收藏  举报