• JVM | 命令行诊断与调优 jhsdb jmap jstat jps


    目录

    jmap

    查看堆使用情况

    查看类列表,包含实例数、占用内存大小

    生成jvm的堆转储快照dump文件

    jstat

    查看gc的信息,查看gc的次数,及时间

    查看VM内存中三代(young/old/perm)对象的使用和占用大小

    查看元数据空间统计

    查看年轻代对象的信息

    查看年轻代对象的信息及其占用量

    查看老年代对象的信息

    查看老年代对象的信息及其占用量

    查看最近一次GC统计和原因

    jps

    查看当前运行中java的进程

    查看进程启动时传递给main()的参数

    查看进程启动时的JVM参数

    部分报错情况

    Cannot connect to core dump or remote debug server. Use jhsdb jmap instead

    ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...


    jmap

    查看堆使用情况

    jmap -heap [pid]

    查看类列表,包含实例数、占用内存大小

    jmap -histo [pid]

    如果带上live则只统计活对象:

    jmap -histo:live [pid]

    生成jvm的堆转储快照dump文件

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

    jstat

    查看JVM统计信息,类装载、内存、垃圾收集、JIT编译等运行数据。

    jstat -

    查看gc的信息,查看gc的次数,及时间

    jstat -gc [pid]

    信息说明:

    • S0C:    年轻代中第一个survivor(幸存区)的容量 (字节)
    • S1C:    年轻代中第二个survivor(幸存区)的容量 (字节)
    • S0U:    年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
    • S1U:    年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
    • EC:      年轻代中Eden的容量 (字节)
    • EU:      年轻代中Eden目前已使用空间 (字节)
    • OC:     老年代的容量 (字节)
    • OU:     老年代目前已使用空间 (字节)
    • MC:     metaspace(元空间)的容量 (字节)
    • MU:     metaspace(元空间)目前已使用空间 (字节)
    • CCSC:当前压缩类空间的容量 (字节)
    • CCSU:当前压缩类空间目前已使用空间 (字节)
    • YGC:  从应用程序启动到采样时年轻代中gc次数
    • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
    • FGC:  从应用程序启动到采样时老年代(全gc)gc次数
    • FGCT:从应用程序启动到采样时老年代(全gc)gc所用时间(s)
    • GCT:  从应用程序启动到采样时gc用的总时间(s)

    查看VM内存中三代(young/old/perm)对象的使用和占用大小

    jstat -gccapacity [pid]

    信息说明:

    • NGCMN: 年轻代(young)中初始化(最小)的大小(字节)
    • NGCMX: 年轻代(young)的最大容量 (字节)
    • NGC:      年轻代(young)中当前的容量 (字节)
    • S0C:       年轻代中第一个survivor(幸存区)的容量 (字节)
    • S1C:       年轻代中第二个survivor(幸存区)的容量 (字节)
    • EC:         年轻代中Eden的容量 (字节)
    • OGCMN:老年代中初始化(最小)的容量大小 (字节)
    • OGCMX:老年代的最大容量(字节)
    • OGC:     老年代当前新生成的容量 (字节)
    • OC:        老年代的容量 (字节)
    • MCMN:   metaspace(元空间)中初始化(最小)的大小 (字节)
    • MCMX:   metaspace(元空间)的最大容量 (字节)
    • MC:        metaspace(元空间)当前新生成的容量 (字节)
    • CCSMN:最小压缩类空间大小
    • CCSMX:最大压缩类空间大小
    • CCSC:   当前压缩类空间大小
    • YGC:     从应用程序启动到采样时年轻代中gc次数
    • FGC:     从应用程序启动到采样时老年代(全gc)gc次数

    查看元数据空间统计

    jstat -gcmetacapacity [pid]

     信息说明:

    • MCMN:  最小元数据容量
    • MCMX:  最大元数据容量
    • MC:       当前元数据空间大小
    • CCSMN:最小压缩类空间大小
    • CCSMX:最大压缩类空间大小
    • CCSC:   当前压缩类空间大小
    • YGC:     从应用程序启动到采样时年轻代中gc次数
    • FGC:     从应用程序启动到采样时老年代(全gc)gc次数
    • FGCT:   从应用程序启动到采样时老年代(全gc)gc所用时间(s)
    • GCT:     从应用程序启动到采样时gc用的总时间(s)

    查看年轻代对象的信息

    jstat -gcnew [pid]

    信息说明:

    • S0C:   年轻代中第一个survivor(幸存区)的容量 (字节)
    • S1C:   年轻代中第二个survivor(幸存区)的容量 (字节)
    • S0U:   年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
    • S1U:   年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
    • TT:      持有次数限制
    • MTT:   最大持有次数限制
    • DSS:   期望的幸存区大小
    • EC:     年轻代中Eden的容量 (字节)
    • EU:     年轻代中Eden目前已使用空间 (字节)
    • YGC:  从应用程序启动到采样时年轻代中gc次数
    • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

    查看年轻代对象的信息及其占用量

    jstat -gcnewcapacity [pid]

    信息说明: 

    • NGCMN: 年轻代(young)中初始化(最小)的大小(字节)
    • NGCMX: 年轻代(young)的最大容量 (字节)
    • NGC:      年轻代(young)中当前的容量 (字节)
    • S0CMX:  年轻代中第一个survivor(幸存区)的最大容量 (字节)
    • S0C:       年轻代中第一个survivor(幸存区)的容量 (字节)
    • S1CMX:  年轻代中第二个survivor(幸存区)的最大容量 (字节)
    • S1C:       年轻代中第二个survivor(幸存区)的容量 (字节)
    • ECMX:    年轻代中Eden的最大容量 (字节)
    • EC:         年轻代中Eden的容量 (字节)
    • YGC:      从应用程序启动到采样时年轻代中gc次数
    • FGC:      从应用程序启动到采样时old代(全gc)gc次数

    查看老年代对象的信息

    jstat -gcold [pid]

    信息说明:

    • MC:     metaspace(元空间)的容量 (字节)
    • MU:     metaspace(元空间)目前已使用空间 (字节)
    • CCSC:压缩类空间大小
    • CCSU:压缩类空间使用大小
    • OC:     Old代的容量 (字节)
    • OU:     Old代目前已使用空间 (字节)
    • YGC:  从应用程序启动到采样时年轻代中gc次数
    • FGC:  从应用程序启动到采样时old代(全gc)gc次数
    • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
    • GCT:  从应用程序启动到采样时gc用的总时间(s)

    查看老年代对象的信息及其占用量

    jstat -gcoldcapacity [pid]

     信息说明:

    • OGCMN:Old代中初始化(最小)的大小 (字节)
    • OGCMX:Old代的最大容量(字节)
    • OGC:     Old代当前新生成的容量 (字节)
    • OC:        Old代的容量 (字节)
    • YGC:     从应用程序启动到采样时年轻代中gc次数
    • FGC:     从应用程序启动到采样时old代(全gc)gc次数
    • FGCT:   从应用程序启动到采样时old代(全gc)gc所用时间(s)
    • GCT:     从应用程序启动到采样时gc用的总时间(s)

    查看最近一次GC统计和原因

    jstat -gccause [pid]

     信息说明:

    • LGCC:最后一次GC原因
    • GCC:  当前GC原因(No GC 为当前没有执行GC)

    jps

    查看当前运行中java的进程

    jps

    查看进程启动时传递给main()的参数

    jps -m

    查看进程启动时的JVM参数

    jps -v

    部分报错情况

    Cannot connect to core dump or remote debug server. Use jhsdb jmap instead

     jdk版本原因所导致的,在jdk8以后需要加上 jhsdb 以运行(注意这里的格式):

    jhsdb jmap --heap --pid [pid]

    ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...

    新版的Linux系统(Ubuntu 11.04之后会出现这种问题)加入了 ptrace-scope 机制。这种机制为了防止用户访问当前正在运行的进程的内存和状态,而一些调试软件本身就是利用 ptrace 来进行获取某进程的内存状态的(包括GDB),所以在新版本的Linux系统,默认情况下不允许再访问了, 可以临时开启(注意权限):

    echo 0 > /proc/sys/kernel/yama/ptrace_scope

    永久修改:

    1. vi /etc/sysctl.d/10-ptrace.conf
    2. kernel.yama.ptrace_scope = 0

  • 相关阅读:
    计算机毕业设计Java滁州市的围棋协会网站(源码+系统+mysql数据库+lw文档)
    【PyTorch】2-主要组成模块(数据读入、模型构建、损失函数、评价指标、训练和测试、优化器)
    springboot:视图渲染技术
    【填坑】THERE IS A CHART INSTANCE ALREADY INITIALIZED ON THE DOM
    第一章:Class文件结构
    基于STM32的智能小车--舵机云台设计
    基于JAVA人脸识别公司签到系统(Springboot框架+AI人工智能) 开题报告
    C++11之初始化列表
    景联文科技提供3D点云-图像标注服务
    苹果 CMS 原生 Java 白菜影视 App 源码【带打包教程】
  • 原文地址:https://blog.csdn.net/Trollz/article/details/134005964