首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Jmap-JVM(十六)

Jmap-JVM(十六)

作者头像
keying
发布2023-09-05 14:36:56
发布2023-09-05 14:36:56
4800
举报

上篇文章说了ZGC是jdk11加入的,他是未来jvm垃圾收集器的奠定者,满足TB级别内存处理,STW时间保持在10ms以下。

ZGC垃圾收集器-JVM(十五)

一、Jmap

我们可以先通过jmap -histo 进程ip 来查看,但是这样看不太清晰,我们可以用这行命令生成一个文件:jmap -histo > ./print.txt。

我们还可以通过jmap -heap 进程ip 来看堆信息。

以上则是命令执行后获取到的信息。

分别代表最大堆空间是3G多,年轻代74M,年轻代最大1个G,老年代171M,元空间则是20多M。

下面则是堆正在用的信息,eden的空间容量是capacity,已经使用和空闲的都显示在内,还有from svrvivor和to survivor容量和使用情况,最后old generation代表老年代使用情况。

命令:jmap -dump:format=b,file=print.hprof 进程ip

则可以导出dump文件,这里是可以通过设置jvm参数来导出的:

-XX:+HeapDumpOnOutOfMemoryError

-XX:+HeapDumpPath=./ (存放dump文件路径)

二、Jstack

命令:jstack 进程ip

从打印的信息可以看到,jstack很容易帮我们发现死锁,甚至连死锁在哪一行都标记出来(在165行)

Thread-20和thread-19线程互相死锁。

还可以看到他们锁的线程ip,是16进制,一个锁着0x000000078591c980

一个锁着0x000000078591c990

三、Jinfo

命令:Info -flags pid

Jinfo -sysprops pid

四、Jstat

命令:jstat -gc pid

S0C:survivor0区域,C代表当前总大小。 (单位KB)

S1C:survivor1区域,C代表当前总大小。

S0U:survivor0区域,U代表Use正在使用的区域大小。

S1U:survivor1区域,U代表Use正在使用的区域大小。

EC:eden区域,C代表当前总大小。

EU:eden区域,U代表Use正在使用的eden区域大小。

OC:old区域,C代表当前总大小。

OU:old区域,U代表Use正在使用的old区域大小。

MC:元空间区域,C代表当前总大小。

MU:元空间区域,U代表元空间正在使用的区域大小。

CCSC和CCSU代表压缩指针。

YGC:8,代表从系统启动开始youngGC发生8次GC。

TGCT:0.858,代表youngGC消耗时间0.858s。

FGC:2,代表从系统启动开始FULLGC发生2次。

FGCT:0.055,代表fullGC消耗0.055s。

GCT:FGC和YGC总的T之和。

Jstat -gc pid 1000 10 代表我要执行10次这个命令,1s执行一次。

Jstat -gccapacity pid可以查看堆情况。

Jstat -gcnew pid可以查看新生代垃圾回收。

Jstat -gcnewcapacity pid查看新生代内存。

Jstat -gcold pid老年代垃圾回收。

Jstat -gcoldcapacity pid老年代内存情况。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档