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

S0C

S1C

S0U

S1U

EC

EU

OC

OU

MC

MU

YGC

YGCT

FGC

FGCT

GCT

From区大小

To区大小

From区已使用

To区

已使用

Eden区的大小

Eden区已使用

老年代的大小

老年代已使用

方法区大小

方法区已使用

Young GC次数

Young GC的耗时

Full GC次数

Full GC的耗时

所有GC的总耗时

 

4、其他的jstat命令

    参考:jstat命令详解

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

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

 

对象增长的速率

触发频率

耗时

Young GC后

存活

进入老年代对象

新生代

 

 

 

 

 

老年代

 

 

 

-----------------

-----------------

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

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

 

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后有多少对象是存活和进入老年代

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

    使用命令:

jstat -gc PID 触发频率 10

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

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

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

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

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

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

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

    

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

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

 

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

 050、JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况_第1张图片

 

 

 050、JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况_第2张图片

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

你可能感兴趣的:(jvm实战高手)