美文网首页
JVM性能调优监控工具之jmap、jhat

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

作者: C1R2 | 来源:发表于2023-02-14 08:49 被阅读0次

    三、 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

    相关文章

      网友评论

          本文标题:JVM性能调优监控工具之jmap、jhat

          本文链接:https://www.haomeiwen.com/subject/znyjkdtx.html