JVM性能调优监控工具之jmap、jhat

2023-02-14  本文已影响0人  C1R2

三、 jmap(Memory Map)和jhat(Java Heap Analysis Tool)

jmap用来查看堆内存使用状况,一般结合jhat使用。
jps: 虚拟机进程状况工具
jps 绝对是使用频率最高的 JDK 命令行工具,它的作用是可以列出正在运行的虚拟机进程,并显示虚拟机执行主类( Main Class , main() 函数所在的类)名称以及这些进程的本地虚拟机唯一 ID ( LVMID , LocalVirtual Machine Identifier )。

jmap语法格式如下:

jmap [option] pid
jmap [option] executable core
jmap [option] [server-id@]remote-hostname-or-ip

可选项 作用
-l 输出完全的包名,应用主类名,jar的完全路径名。
-q 仅输出 VM 标识符,不包括 classname , jar name , arguments in main method 。
-m 输出 main method 的参数。
-v 输出 JVM 参数。

如果运行在64位JVM上,可能需要指定-J-d64命令选项参数。

jmap -permstat pid

打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息,如下图:


image.png

使用jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况。比如下面的例子:


image.png

使用jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象,如下:

image.png

class name是对象类型,说明如下:

B byte

C cha

rD double

F floatI int

J long

Z boolean

[ 数组,如[I表示int[]

[L+类名 其他对象

还有一个很常用的情况是:用jmap把进程内存使用情况dump到文件中,再用jhat分析查看。jmap进行dump命令格式如下:

jmap -dump:format=b,file=dumpFileName pid

我一样地对上面进程ID为21711进行Dump:

root@ubuntu:/# jmap -dump:format=b,file=/tmp/dump.dat 21711
Dumping heap to /tmp/dump.dat ...
Heap dump file created

dump出来的文件可以用MAT、VisualVM等工具查看,这里用jhat查看:


image.png

注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存
即jhat -J-Xmx512m -port 9998 /tmp/dump.dat。然后就可以在浏览器中输入主机地址:9998查看了:

image.png

上面红线框出来的部分大家可以自己去摸索下,最后一项支持OQL(对象查询语言)。

--参考
链接:https://www.jianshu.com/p/0c2e7719dc93

上一篇 下一篇

猜你喜欢

热点阅读