Docker下使用jstat查看jvm的GC信息

Jstat指令:

    jstat命令命令格式:

    jstat [Options]vmid [interval] [count]java

    参数说明:

        Options,选项,咱们通常使用 -gcutil 查看gc状况docker

        vmid,VM的进程号,即当前运行的java进程号bash

        interval,间隔时间,单位为秒或者毫秒spa

        count,打印次数,若是缺省则打印无数次对象

经常使用指令

    1. jstat -gc pidblog

           能够显示gc的信息,查看gc的次数,及时间。进程

           其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。内存

     2.jstat -gccapacity pidci

           能够显示,VM内存中三代(young,old,perm)对象的使用和占用大小,it

           如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,

           PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。

           其余的能够根据这个类推, OC是old内纯的占用量。

    3.jstat -gcutil pid

           统计gc信息统计。

    4.jstat -gcnew pid

          年轻代对象的信息。

    5.jstat -gcnewcapacity pid

          年轻代对象的信息及其占用量。

    6.jstat -gcold pid

         old代对象的信息。

    7.stat -gcoldcapacity pid

         old代对象的信息及其占用量。

    8.jstat -gcpermcapacity pid

         perm对象的信息及其占用量。

    9.jstat -class pid

         显示加载class的数量,及所占空间等信息。

    10.jstat -compiler pid

         显示VM实时编译的数量等信息。

    11.stat -printcompilation pid

         当前VM执行的信息。

 

jstat -gccause pid 1 每格1毫秒输出结果

jstat -gccause pid 3000 每格3秒输出结果

图中参数含义以下:

   S0  — Heap上的 Survivorspace 0 区已使用空间的百分比    

   S1  — Heap上的 Survivorspace 1 区已使用空间的百分比    

   E   — Heap上的 Eden space区已使用空间的百分比    

   O   — Heap上的 Old space 区已使用空间的百分比    

   P   — Perm space 区已使用空间的百分比

   YGC  — 从应用程序启动到采样时发生 YoungGC 的次数

   YGCT –从应用程序启动到采样时 Young GC 所用的时间(单位秒)    

   FGC  — 从应用程序启动到采样时发生 Full GC的次数

   FGCT –从应用程序启动到采样时 Full GC 所用的时间(单位秒)    

   GCT  — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

 

分代垃圾回收详述

如上图所示,为Java堆中的各代分布。

 

Young(年轻代)

年轻代分三个区。一个Eden区,两个 Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个 Survivor区满时,此区的存活对象将被复制到另一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的而且此时还存活的对象,将被复制“年老区(Tenured)”。须要注意,Survivor的两个区是对称的,没前后关系,因此同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。并且,Survivor区总有一个是空的。

Tenured(年老代)

年老代存放从年轻代存活的对象。通常来讲年老代存放的都是生命期较长的对象。

Perm(持久代)

用 于存放静态文件,现在Java类、方法等。持久代对垃圾回收没有显著影响,可是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候须要设置一个比较大的持久代空间来存放这些运行过程当中新增的类。持久代大小经过-XX:MaxPermSize=进行设置。

 

GC类型

GC有两种类型:Scavenge GCFull GC

Scavenge GC

通常状况下,当新对象生成,而且在Eden申请空间失败时,就好触发ScavengeGC,堆Eden区域进行GC,清除非存活对象,而且把尚且存活的对象移动到Survivor区。而后整理Survivor的两个区。

Full GC

对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,所以应该尽量减小FullGC。有以下缘由可能致使Full GC:

Tenured被写满

Perm域被写满

System.gc()被显示调用

上一次GC以后Heap的各域分配策略动态变化GC类型

 

Docker容器中使用jstat过程:

1.     列出docker容器:docker ps

2.     标准输入和关联终端:docker exec -it 容器ID  bash

3.     查找出java进程: ps – ef | grep java

4.     统计gc信息统计: jstat –gcutil 466 3000 每三秒打印一次

相关文章
相关标签/搜索