jstat命令实战及内存模型介绍

首先看下jvm内存模型图

jstat命令实战及内存模型介绍_第1张图片

        内存在survivor区进行正常的minorGC,minorGC触发时,暂停程序的时间较短 ,影响很小,但是当满足一定条件,比如经过from-to增长年龄之后,到了一定的年龄,就会转移到老年代,老年代内存接近满的时候会触发fullGC,fullGC则会stop the world,停止掉程序来进行垃圾回收。

使用命令查看线上问题:

jstat -gcutil pid 1000 10

通过该命令获取的信息,可以分析Eden区每秒或者设置的每分钟增长的新生代的大小。可根据该分析推测出Young GC的出发频率和每次耗时。

jstat命令实战及内存模型介绍_第2张图片

老年代fullGC之后仍然占用满的 下一步就会内存溢出 老年代都放不下了。

结合我们的jvm内存模型,内存在survivor区进行正常的minorGC,minorGC触发时,暂停程序的时间较短 ,影响很小,但是当满足一定条件,比如经过from-to增长年龄之后,到了一定的年龄,就会转移到老年代,老年代内存接近满的时候会触发fullGC,fullGC则会stop the world,停止掉程序来进行垃圾回收,上面的打印结果中FGC如果很多达到几百个,且空间并不释放,这时候内存已经占满,虚拟机内存溢出,程序不可正常使用了。

虚拟机内存配置--

使用gcutil选项 此示例附加到lvmid 21891 并以 250 毫秒的间隔采集 7 个样本,并显示-gcutil选项指定的输出。

jstat -gcutil 21891 250 7

S0 S1 EOP YGC YGCT FGC FGCT GCT 

 12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.672 

 12.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.672 

 12.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.672 

  0.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.673 

  0.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.673 

  0.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.673 

  0.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673

此示例的输出显示在第 3 个和第 4 个样本之间发生了一次年轻代收集。收集耗时 0.001 秒,将对象从 eden 空间 (E) 提升到 old 空间 (O),导致 old 空间利用率从 9.49% 提高到 9.51%。在收集之前,幸存者空间的利用率为 12.44%,但在此收集之后,它的利用率仅为 7.74%。

你可能感兴趣的:(java,java,jvm,内存调优)