深入JVM虚拟机之使用jstat命令摸清线上系统的JVM运行状态

1、对于运行中的系统,想检查JVM中的整体运行情况,最常用的工具就是jstat

2、通过jstat可以查看JVM内部的内存的使用情况,还有GC的执行次数以及耗时

3、通过这些指标,可以判断出系统的当前内存使用压力以及GC压力,内存分配是否合理

 

新生代对象的增长速度

1、对JVM首先要了解的,就是随着系统的运行,每秒钟会在年轻代的Eedn区分配多少对象

2、 jstat -gc [PID] 1000每隔1秒中执行1次jstat统计

3、举例:第一秒先显示Eden区使用了200MB内存,第二秒显示Eden区使用了205MB内存,第三秒显示Eden区使用了209MB内存,此时你可以轻易的推断出来,这个系统大概每秒钟会新增5MB左右的对象

4、按照上述思路,可以把握线上系统的高峰和日常两个时间段的对象增长速率。

Young GC的触发频率

1、知道新生代对象的增长的速度,很容易推测出来多久发生一次Young GC  

2、比如5MB每秒,Eden区一共300MB,则大概1分钟就会Monitor GC一次。

Young GC平均耗时

1、jstat结果显示了系统已经发生饿多少次Young GC以及这些Young GC总耗时

2、比如系统运行24小时后共发生了300次Young GC,总耗时为30s,那么平均下来每次Young GC大概耗时0.1秒的时间,也就是会导致系统停顿0.1秒的时间。

老年代

1、从一个正常的角度来看,来年代扽对象是不太可能不停的快速增长的,因为普通的系统其实没那么多长期存活的对象。

2、如果你发现比如每次Young GC过后,老年代对象都要增长几十MB,那很有可能就是你一次Young GC过后存活的对象太多了。

3、老年代满了会触发Full GC,极度影响程序性能。

Full GC平均耗时

1、Jstat结果中显示系统已经发生了多少次Full GC以及这些Full  GC的总耗时。

2、调优 的目的是为了Full  GC出现的越少越好。

总结:

1、灵活运行jstat,可以轻而易举掌控线上JVM运行的详细情况

2、针对JVM具体运行情况去进行有针对性的优化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章