1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 050 JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况

050 JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况

时间:2021-03-10 14:01:40

相关推荐

050 JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况

jstat详细信息,参考:jstat - Java Virtual Machine Statistics Monitoring Tool

1、前文回顾

对象优先在Eden区分配,Young GC的触发时机和执行过程,对象进入老年代的时机,Full GC的触发时机和执行过程

2、功能强大的jstat

可以看到JVM各个区内存使用情况,GC执行次数及耗时,从而可以判断内存使用压力、GC压力、内存分配是否合理

3、jstat -gc PID

jps //查看java进程的PID

jstat -gc PID

4、其他的jstat命令

参考:jstat命令详解

5、到底该如何使用jstat工具?

分析线上的JVM进程,最想要知道的信息有哪些?如下表

结合之前的JVMGC优化的方法,合理分配内存。

总体原则:短命对象在新生代被回收,避免进入老年代。长期存活对象早点进入老年代,不要复制来复制去

6、新生代对象增长的速率

对jvm第一个要了解的事:每秒钟会在年轻代的Eden区分配多少对象jstat -gc PID 1000 10

关注高峰期和非高峰期的增长速率。高峰期可以使用jstat -gc PID 1000 10非高峰期可以使用:jstat -gc PID 60000 10

7、Young GC的触发频率和每次耗时

对象增长速率知道了,GC的频率其实可以推算出来。

触发频率 = Eden区大小 / 新生代对象增长速率

每次的耗时 =YGCT / YGC

8、每次Young GC后有多少对象是存活和进入老年代

需要推算:每次YoungGC后多少对象存活、多少进入老年代。

使用命令:

jstat -gc PID 触发频率 10

观察发生了一次Young GC,此时Eden、Survivor、老年代的对象变化。

YoungGC后的Eden区存活 =S区增长 +老年代的增长,关键观察老年代的对象增长速率。

一般的系统正常情况下,没有那么多存活的对象,即老年代的对象是不太可能不停的快速增长的。

老年代每次都增加几十M情况:

1、存活对象太多触发了动态年龄判断

2、存活对象太多触发了S区放不下

YoungGC后的堆存活 =S区存活 +老年代存活

9、Full GC的触发时机和耗时

Old GC触发频率 = 老年空间/老年代的增长 * YoungGC触发频率

本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明。详细内容:

如果购买,成功后加QQ群找群主返现10元

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。