jstat:虚拟机统计信息监控工具

《深入理解Java虚拟机》一书中用的jdk版本是1.6。书中的4.2.2的例子在jdk1.8下的表现和书中的描述不太一样,在此记录下。

由于jdk1.8的Hotspot虚拟机已经移除了永久代,字符串常量移到了堆内存中。新增了Metaspace(元空间),将方法区移到Metaspace中。Metaspace使用本地内存,大小受限于物理机内存。

jstat是用于监控虚拟机各种运行状态信息的命令行工具。它可以显示虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

写一个例子示范下

1、新建一个controller

@RestController
@RequestMapping("/jvm/jstat")
public class B_Jstat {
    Logger logger = LoggerFactory.getLogger(B_Jstat.class);
    static List<OOMObject2> list = new ArrayList<>();

    static class OOMObject2{
        public byte[] placeholder = new byte[1024 * 1024];  //1M byte数组
    }
    public static void fillOutOfMemory(int num) throws InterruptedException{
        list = new ArrayList<>();
        for (int i = 0; i < num ; i++){
            TimeUnit.MILLISECONDS.sleep(100);
            list.add(new OOMObject2());
        }
    }
    //属性list填充1000个OOMObject2实例,模拟堆内存溢出
    @GetMapping("/obj")
    public String outOfMemory(HttpServletRequest request) throws Exception{
        fillOutOfMemory(1000);
        return "完成";
    }
}

2、启动服务,最大最小堆内存设置为512m。 nohup java -jar -Xms512m -Xmx512m spring-boot-lean.jar &

3、进入  java根目录/jdkXXX/bin目录,使用jstat监控虚拟机运行状态,如图1所示  

4、发送一个请求http://XXX:8080/jvm/jstat/obj ,监控数据就发生了变化。

jstat -gc 6602 5000 100 命令讲解:

-gc的作用是监控Java堆状况,包括Eden区、两个survivor区、老年代等的容量、已用空间、GC时间合计等信息。

6602是spring-boot-lean.jar这服务的进程号

5000表示5秒查询一次进程

100表示一共查询100次

图1参数讲解

S0C    survivor区0总容量,单位KB
S1C    survivor区1总容量,单位KB
S0U    survivor区0使用量,单位KB
S1U    survivor区1使用量,单位KB
EC     Eden区总容量,单位KB
EU     Eden区使用量,单位KB
OC     老年代总容量,单位KB
OU     老年代使用量,单位KB
MC     Metaspace总容量,单位KB
MU     Metaspace使用量,单位KB
CCSC   Metaspace中Klass Metaspace总容量,单位KB
CCSU   Metaspace中Klass Metaspace使用量,单位KB
YGC    Minor GC 次数
YGCT   Minor GC 消耗总时间,单位S
FGC    FullGC 次数
FGCT   FullGC 消耗总时间,单位S
GCT    GC总消耗时间,单位S

B_Jstat的list是强引用,导致所有new OOMObject2()无法被垃圾回收机制回收。从图1可以看出

1、老年代的使用量OU逐渐上升。

2、OU达到最大值后,虚拟机无法将对象复制到OU中,所以EU无法降低(最后几行记录,EU无法降低了)。

3、从图中还可以看出survivor区还可以从Eden区借走一部分容量。

发布了51 篇原创文章 · 获赞 14 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u010606397/article/details/82807937
今日推荐