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元