当前位置:网站首页>JVM命令之 jstat:查看JVM统计信息
JVM命令之 jstat:查看JVM统计信息
2022-07-07 00:46:00 【张俊杰1994】
学习 尚硅谷 宋红康 JVM从入门到精通 的学习笔记
概述
基本语法
其中vmid是进程id号,也就是jps之后看到的前面的号码,如下:
option参数
-gc
新生代相关
S0C是第一个幸存者区的大小(字节)
S1C是第二个幸存者区的大小(字节)
S0U是第一个幸存者区已使用的大小(字节)
S1U是第二个幸存者区已使用的大小(字节)
EC是Eden空间的大小(字节)
EU是Eden空间已使用大小(字节)
老年代相关
OC是老年代的大小(字节)
OU是老年代已使用的大小(字节)
方法区(元空间)相关
MC是方法区的大小
MU是方法区已使用的大小
CCSC是压缩类空间的大小
CCSU是压缩类空间已使用的大小
其他
YGC是从应用程序启动到采样时young gc的次数
YGCT是指从应用程序启动到采样时young gc消耗时间(秒)
FGC是从应用程序启动到采样时full gc的次数
FGCT是从应用程序启动到采样时的full gc的消耗时间(秒)
GCT是从应用程序启动到采样时gc的总时间
interval参数
用于指定输出统计数据的周期,单位为毫秒。即:查询间隔
count参数
用于指定查询的总次数
-t参数
可以在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒
我们执行jstat -gc -t 13152 1000 10,这代表1秒打印出1行,一共10行,-t代表打印出Timestamp总运行时间,结果如下所示:
上方红色框框中代表Timestamp,而蓝色框框中代表垃圾回收时间,单位都是秒,如果让红色框框中的某两个值相减,假设这个值是num1,然后让对应行的蓝色框框中的另外两个值相减,假设这个值是num2,之后让num2/num1,得出的差值就是上述所说的GC时间占运行时间的比例
虽然这种方式比较繁琐,但是在项目部署之后就需要使用命令行去看了,就没有可视化界面了,所以这种方式也要会
-h参数
可以在周期性数据输出时,输出多少行数据后输出一个表头信息
演示
启动上面的程序
输入下面的命令
Loaded是加载类的个数
第一个Bytes是加载的类占用的字节数
Unloaded是卸载类的个数
第二个Bytes是卸载的类占用的字节数
Time是类装载花费的时间
箭头的参数是 interval参数,
箭头的意思是1秒钟打印一次,便于我们持续的监控.会一直打印,直到程序结束了才不会打印.
箭头的参数是打印的次数,10意思是总共会打印10次,达到10次之后就会停止打印.
-t的意思是输出 从程序运行起来到现在你敲击命令的时候总共执行了多长时间,单位是秒
Timestamp就是这个时间
-h3的意思是每隔三条记录输出一次表格头部
compiler是显示编译过的方法,编译过的方法的耗时,编译失败的方法等等
打印被编译的方法
s0c 幸存者0区容量
s1c 幸存者1区容量
sou 幸存者0区已经使用的容量
s1u 幸存者1区已经使用的容量
ec 伊甸园区总容量
eu 伊甸园区已经使用的容量
oc 是老年代的总量
ou 是老年代使用的容量
mc是方法区的容量
mu是方法区使用的容量
ccsc是压缩类的总量
ccsu 是压缩类的使用容量
ygc 是young gc发生的参数
tgct 是young gc花费的时间
fgc是full gc的参数
fgct 是full gc花费的时间
gct 是总的gc的时间, 总gc花费的时间=young gc花费的时间+full gc花费的时间
jstat:如何排查OOM和内存泄漏
平时的时候可以用一些图形界面的工具查看,但是在实际生产环境,可能无法使用这些图形界面工具,只能是用jdk自带的jstat工具查看监控了.
启动这个main方法
注意,在执行上面的命令的时候没有抛出oom异常,然后后面Java程序控制台就抛出这个异常了.
出现gc的原因
oom排查经验:
经验:
我们可以比较Java进程的启动时间以及总gc的时间(gct列),或者两次测量的间隔时间以及总gc的时间的增量(执行gc花了多少时间),来得出gc执行时间占程序运行时间的比例.
上面两个红框的之间的数据的gct时间之和 除以 上面两个红框的之间的数据的 Timestamp时间之和,来得到垃圾回收的时间占用程序执行的总共时间的比例
如果这个比例超过20%,就说明目前的堆压力较大, 因为垃圾回收的时间稍微多了一点,如果这个比例超过90%了,那就意味着程序执行的时间百分之90的时间都用来垃圾回收了,说明内存空间基本上就没有什么了,那么随时就有可能出现oom异常了.
用jstat判别内存泄露问题
补充
第1步可以执行命令:jstat -gc -t 13152 1000 20
每隔一段时间观察一下 ou 参数, 如果 ou参数(老年代内存使用量)的占用越来越高,这个情况就是老年代无法回收的对象在不断增长, 你就要想想,为什么gc没有把这些对象清理掉,估计就有可能出现内存泄露情况了.
jstatd:远程主机信息收集
因为我们要监控的数据不一定是本地的,很多要监控的数据是线上linux上的,这个时候就需要用jstatd这个工具进行远程监控了。
命令jstatd是一个rmi服务端程序,作用相当于代理服务器,建立本地计算机与远程监控工具的通信,jstatd服务器将本机的Java应用程序信息传递到远程计算机上。
边栏推荐
- mac版php装xdebug环境(m1版)
- R language [logic control] [mathematical operation]
- Add salt and pepper noise or Gaussian noise to the picture
- 云加速,帮助您有效解决攻击问题!
- Harmonyos practice - Introduction to development, analysis of atomized services
- What is message queuing?
- 线性回归
- Reading notes of Clickhouse principle analysis and Application Practice (6)
- SQL Server 2008 各种DateTime的取值范围
- 绕过open_basedir
猜你喜欢
苹果cms V10模板/MXone Pro自适应影视电影网站模板
《ClickHouse原理解析与应用实践》读书笔记(6)
EMMC打印cqhci: timeout for tag 10提示分析与解决
[daily training -- Tencent selected 50] 235 Nearest common ancestor of binary search tree
【日常训练--腾讯精选50】235. 二叉搜索树的最近公共祖先
bat 批示处理详解
Interview skills of software testing
绕过open_basedir
Introduction to distributed transactions
nVisual网络可视化
随机推荐
pytorch_ 01 automatic derivation mechanism
从“跑分神器”到数据平台,鲁大师开启演进之路
AI face editor makes Lena smile
[cloud native] what is the microservice architecture?
Go 语言的 Context 详解
SQLSTATE[HY000][1130] Host ‘host. docker. internal‘ is not allowed to connect to this MySQL server
Forkjoin is the most comprehensive and detailed explanation (from principle design to use diagram)
PTA TIANTI game exercise set l2-003 moon cake test point 2, test point 3 Analysis
目标检测中的损失函数与正负样本分配:RetinaNet与Focal loss
MFC BMP sets the resolution of bitmap, DPI is 600 points, and gdiplus generates labels
The 2022 China low / no code Market Research and model selection evaluation report was released
随机生成session_id
Detailed explanation of platform device driver architecture in driver development
SAP ABAP BDC (batch data communication) -018
老板总问我进展,是不信任我吗?(你觉得呢)
CMD permanently delete specified folders and files
[云原生]微服务架构是什么?
980. Different path III DFS
JVM the truth you need to know
Question 102: sequence traversal of binary tree