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

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

jmap

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

查看一个进程的存活对象:

jmap -histo:live pid

这个指令就不用时时 dump 出堆转储文件,还要加载分析。不过。。。不过这个只能看实时,想事后分析,还是得dump出来。。。

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 -gcutil {pid} 5000


关于 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:年轻代垃圾回收消耗时间




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

posted @   aaacarrot  阅读(319)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2022-05-09 durid 监控
点击右上角即可分享
微信分享提示