【内存分析】用于内存分析定位的指令 jmap, jstat, jinfo, jstack

发布时间 2023-05-09 10:00:58作者: aaacarrot

用于内存分析定位的指令/工具有: jmap, jstat, jinfo, jstack

jmap

(1)分析进程中的内存使用情况,是多少个什么样的对象占用了多大的内存,这类型的分析
(2)也可以导出堆转储文件, 导出后,再来分析

jstack

这个是看cpu 的,看各个线程的执行状态,如果 cpu 比较高,就是用 jstack 来定位分析。
(1)如果内存不足,gc 回收有问题,就会造成频繁gc, 也会造成 cpu 很高。这类型的问题
(2)或者程序死锁了,卡住不动了,就得看一下它里面的线程在搞啥子

jinfo

jinfo pid: 查看java系统参数

jstat

查看堆内存各部分的使用量,以及加载类的数量

通过 jstat -options 可以查看 Jstat 带的参数

jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

关于 jstat 的一些指令使用 及 参数说明

jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]      查看堆内存各部分的使用量,以及加载类的数量
jstat -gc pid 可以评估程序内存使用及GC压力整体情况, // 参数说明
    S0C:第一个幸存区的大小,单位KB 
    S1C:第二个幸存区的大小 
    S0U:第一个幸存区的使用大小
    S1U:第二个幸存区的使用大小 
    EC:伊甸园区的大小 
    EU:伊甸园区的使用大小 
    OC:老年代大小 
    OU:老年代使用大小 
    MC:方法区大小(元空间) 
    MU:方法区使用大小 
    CCSC:压缩类空间大小 
    CCSU:压缩类空间使用大小 
    YGC:年轻代垃圾回收次数 
    YGCT:年轻代垃圾回收消耗时间,单位s 
    FGC:老年代垃圾回收次数  
    FGCT:老年代垃圾回收消耗时间,单位s 
    GCT:垃圾回收消耗总时间,单位s 
jstat -gccapacity [pid] 堆内存统计
    NGCMN:新生代最小容量 
    NGCMX:新生代最大容量 
    NGC:当前新生代容量 
    S0C:第一个幸存区大小 
    S1C:第二个幸存区的大小 
    EC:伊甸园区的大小 
    OGCMN:老年代最小容量 
    OGCMX:老年代最大容量 
    OGC:当前老年代大小 
    OC:当前老年代大小 
    MCMN:最小元数据容量 
    MCMX:最大元数据容量 
    MC:当前元数据空间大小 
    CCSMN:最小压缩类空间大小 
    CCSMX:最大压缩类空间大小 
    CCSC:当前压缩类空间大小 
    YGC:年轻代gc次数 
    FGC:老年代GC次数 
jstat -gcnew [pid]  新生代垃圾回收统计
    S0C:第一个幸存区的大小 
    S1C:第二个幸存区的大小 
    S0U:第一个幸存区的使用大小 
    S1U:第二个幸存区的使用大小 
    TT:对象在新生代存活的次数 
    MTT:对象在新生代存活的最大次数 
    DSS:期望的幸存区大小 
    EC:伊甸园区的大小 
    EU:伊甸园区的使用大小 
    YGC:年轻代垃圾回收次数 
    YGCT:年轻代垃圾回收消耗时间




之前遇到内存泄露,程序假死,死锁等情况,都是直接重启了,根本没有去看是什么原因造成,
得到一些定位方式方法之后,
下次再有内存泄露,就得尝试去定位一下先,不必每次直接重启大法。