【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:年轻代垃圾回收消耗时间
之前遇到内存泄露,程序假死,死锁等情况,都是直接重启了,根本没有去看是什么原因造成,
得到一些定位方式方法之后,
下次再有内存泄露,就得尝试去定位一下先,不必每次直接重启大法。
分类:
java / 02-jvm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2022-05-09 durid 监控