📂JVM
2022-06-30 20:53阅读: 120评论: 0推荐: 0

JVM常用监控工具解释以及使用

    jps进程状况工具

    jps:JVM Process Status Tool
    jps [options] [hostId]
    

    jps工具的主要选项options

    在这里插入图片描述

    jstat统计信息监控工具

    jstat:JVM Statistics Monitoring Tool
    

    可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾手机、即时编译等运行时数据。

    jstat [options vmid [interval [s/ms] [count] ] ]
    

    注意:本地虚拟机VMID和LVMID是一致的,

    远程虚拟机的VMID格式为:

    [protocol : ] [//] lvmid [@hostname [:port] /servername]

    参数interval和count代表查询间隔和次数,如果省略代表查询一次。

    选项options代表用户查询的虚拟机信息,主要分为三类:

    1、类加载

    2、垃圾收集

    3、运行期编译情况

    jstat工具的主要选项options


    如图所示,每秒监控进程ID为1的gc情况以及内存使用情况

    如下所示,是图中标题名的解释:

    堆内存 = 年轻代 + 年老代 + 永久代

    年轻代 = Eden区 + 两个Survivor区(From和To)

    S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)

    EC、EU:Eden区容量和使用量

    OC、OU:年老代容量和使用量

    PC、PU:永久代容量和使用ssss量

    YGC、YGT:年轻代GC次数和GC耗时

    FGC、FGCT:Full GC次数和Full GC耗时

    GCT:GC总耗时

    jmap堆内存使用状况

    jmap用来查看堆内存使用状况,一般结合jhat使用
    jmap语法格式如下:

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

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

    jmap -permstat pid
    
    • 使用jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况。

    在这里插入图片描述

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

    在这里插入图片描述

    #instance 是对象的实例个数
    #bytes 是总占用的字节数
    class name 对应的就是 Class 文件里的 class 的标识
    B 代表 byte
    C 代表 char
    D 代表 double
    F 代表 float
    I 代表 int
    J 代表 long
    Z 代表 boolean
    前边有 [ 代表数组, [I 就相当于 int[]
    对象用 [L+ 类名表示

    用jmap把进程内存使用情况dump到文件中,再用jhat分析查看。jmap进行dump命令格式如下:

    jmap -dump:format=b,file=/tmp/dump.dat pid
    

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

    jhat -port 9998 /tmp/dump.dat
    

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

    jstack线程堆栈信息

    jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:

    jstack [option] pid

    jstack [option] executable core

    jstack [option] [server-id@]remote-hostname-or-ip

    • -l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
    • -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

    jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。

    在这里插入图片描述

    在这里插入图片描述

    更多文章和干货请关注公众号

    本文作者:Java技术债务
    原文链接:https://cuizb.top/myblog/article/1642656309
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。

    posted @   Java技术债务  阅读(120)  评论(0编辑  收藏  举报
    点击右上角即可分享
    微信分享提示
    💬
    评论
    📌
    收藏
    💗
    关注
    👍
    推荐
    🚀
    回顶
    收起
    1. 1 404 not found REOL
    404 not found - REOL
    00:00 / 00:00
    An audio error has occurred.