jstat命令使用

jstat是JDK自带的一个轻量级小工具,全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

命令格式

➜  ~ jstat -help
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
  • option:参数选项
  • -t:可以在打印的列加上TImestamp列,用于显示系统运行时间
  • -h:在周期性输出数据时,指定在输出多少行之后输出一次表头
  • vmid:Virtual Machine,进程的PID
  • interval:每次执行的时间间隔,单位为毫秒
  • count:用于指定输出多少次记录,缺省则会一直打印

jstat -options

➜  ~ jstat -options
-class # 输出ClassLoad相关的信息
-compiler # 输出JIT编译的相关信息
-printcompilation # 输出JIT编译的方法信息
-gc # 输出和GC相关的堆信息
-gccapacity # 输出各个代的容量及使用情况
-gcutil # 输出垃圾收集器的信息
-gccause # 输出GC的相关信息,同时显示最后一次或当前正在发生GC的诱因
-gcmetacapacity # 输出metaspace的大小和使用情况
-gcnew # 输出新生代的信息
-gcnewcapacity # 输出新生代大小和使用情况
-gcold # 输出老年代的信息
-gcoldcapacity # 输出老年代的大小和使用情况

-class

➜  ~ jstat -class <pid>
Loaded Bytes Unloaded Bytes Time
9232 17587.8 0 0.0 3.93
  • Loaded:已加载的类的数量
  • Bytes:已加载的类所占用的字节数
  • Unloaded:已卸载的类的数量
  • Bytes:已卸载类的字节数
  • Time:加载和卸载类所花费的时间

-compiler & -printcompilation

➜  ~ jstat -compiler <pid>
Compiled Failed Invalid Time FailedType FailedMethod
5161 0 0 1.46 0
➜ ~ jstat -printcompilation 12757
Compiled Size Type Method
5354 5 1 org/apache/commons/pool2/impl/GenericObjectPool getMaxIdle

-compiler

  • Compiled:编译任务执行的数量
  • Failed:编译任务执行失败的数量
  • Invalid:编译任务执行失效的数量
  • Time:编译任务消耗的时间
  • FailedType:最后一个编译失败任务的类型
  • FailedMethod:最后一个编译失败任务所在的类及方法

-printcompilation

  • Compiled:编译任务执行的数量
  • Size:最近编译方法的字节码数量
  • Type:最近编译方法的编译类型
  • Method:最近编译的方法

-gc

➜  ~ jstat -gc <pid>
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
78336.0 78336.0 47364.9 0.0 629760.0 417152.7 1310720.0 120.0 45952.0 44923.2 5760.0 5573.3 2 0.069 0 0.000 0.069
  • S0C:S0区的容量
  • S1C:S1区的容量
  • S0U:S0区已使用的容量
  • S1U:S1区已使用的容量
  • EC:Eden区的容量
  • EU:Eden区已使用的容量
  • OC:Old区的容量
  • OU:Old区已使用的容量
  • MC:MetaSpace区的容量
  • MU:MetaSpace区已使用的容量
  • CCSC:压缩类的容量
  • CCSU:压缩类已使用的容量
  • YGC:YoungGC的次数
  • YGCT:YoungGC耗时
  • FGC:FullGC的次数
  • FGCT:FullGC的耗时
  • GCT:GC总耗时

-gccapacity

➜  ~ jstat -gccapacity <pid>
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
786432.0 786432.0 786432.0 78336.0 78336.0 629760.0 1310720.0 1310720.0 1310720.0 1310720.0 0.0 1089536.0 45952.0 0.0 1048576.0 5760.0 2 0
  • NGCMN:年轻代初始化的最小容量
  • NGCMX:年轻代初始化的最大容量
  • NGC:当前年轻代的实际容量
  • S0C:S0区的容量
  • S1C:S1区的容量
  • EC:Eden区的容量
  • OGCMN:老年代初始化的最小容量
  • OGCMX:老年代初始化的最大容量
  • OGC:当前老年代的实际容量
  • OC:当前老年代的实际容量(与OGC什么区别?)
  • MCMN:MetaSpace初始化的最小容量
  • MCMX:MetaSpace初始化的最大容量
  • MC:当前MetaSpace的实际容量
  • CCSMN:压缩类的最小容量
  • CCSMX:压缩类的最大容量
  • XXSC:压缩类的当前容量
  • YGC:从启动到现在YoungGC的次数
  • FGC:从启动到现在FullGC的次数

-gcutil & -gccause

➜  ~ jstat -gcutil <pid>
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
60.46 0.00 67.09 0.01 97.76 96.76 2 0.069 0 0.000 0.069
➜ ~ jstat -gccause <pid>
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
60.46 0.00 67.09 0.01 97.76 96.76 2 0.069 0 0.000 0.069 Allocation Failure No GC
  • S0:S0区已使用的百分比
  • S1:S1区已使用的百分比
  • E:Eden区已使用的百分比
  • O:Old区已使用的百分比
  • M:MetaSpace区已使用的百分比
  • CCS:不知道???
  • YGC:从启动到现在YoungGC执行次数
  • YGCT:最后一次执行YoungGC所消耗的时间
  • FGC:从启动到现在FullGC的执行次数
  • FGCT:最后一次执行FullGC所消耗的时间
  • GCT:最后一次YoungGC+FullGC消耗的时间
  • 我---是---分---割---线
  • LGCC:最后一次GC发生的原因
  • GCC:当前GC的原因,No GC表示当前没有执行GC

-gcmetacapacity

➜  ~ jstat -gcmetacapacity <pid>
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1089536.0 45952.0 0.0 1048576.0 5760.0 2 0 0.000 0.069
  • MCMN:MetaSpace的最小容量
  • MCMX:MetaSpace的最大容量
  • MC:当前MetaSpace的容量
  • CCSMN:压缩类空间的最小容量
  • CCSMX:压缩类空间的最大容量
  • CCSC:当前压缩类空间的容量
  • YGC:从启动到现在YoungGC执行次数
  • FGC:从启动到现在FullGC的执行次数
  • FGCT:最后一次执行FullGC所消耗的时间
  • GCT:最后一次YoungGC+FullGC消耗的时间

-gcnew & -gcnewcapacity

➜  ~ jstat -gcnew <pid>
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
78336.0 78336.0 47364.9 0.0 15 15 78336.0 629760.0 444596.5 2 0.069
➜ ~ jstat -gcnewcapacity <pid>
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
786432.0 786432.0 786432.0 78336.0 78336.0 78336.0 78336.0 629760.0 629760.0 2 0

简单解释一下这几个参数,其它参数应该都知道了。

  • TT:对象在新生代存活的次数?
  • MTT:对象在新生代存活的最大次数?
  • DSS:期望的幸存区容量

-gcold & -gcoldcapacity

➜  ~ jstat -gcold <pid>
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
45952.0 44923.2 5760.0 5573.3 1310720.0 120.0 2 0 0.000 0.069
➜ ~ jstat -gcoldcapacity <pid>
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
1310720.0 1310720.0 1310720.0 1310720.0 2 0 0.000 0.069

上面的参数理解了,这些参数应该没什么问题了。

jstat命令使用的更多相关文章

  1. Linux使用jstat命令查看jvm的GC情况

    Linux使用jstat命令查看jvm的GC情况 http://www.open-open.com/lib/view/open1390916852007.html http://www.aiuxian ...

  2. Java内存泄漏分析系列之三:jstat命令的使用及VM Thread分析

    原文地址:http://www.javatang.com 使用jstat命令 当服务器CPU100%的时候,通过定位占用资源最大的线程定位到 VM Thread: "VM Thread&qu ...

  3. jstat命令查看jvm的GC情况 (以Linux为例)

    jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]  注意!!!:使用的jdk版本是jdk8. ...

  4. 如何在宿主机上执行容器里的jmap,jtack,jstat 命令获取信息(原创)

    一般情况下,我们要获取docker容器里的jvm信息只能进入容器后执行jmap,jstack,jstat 命令去获取,jstack,jstat还好,但是jmap dump的文件要拿出来,得先copy ...

  5. 【九】虚拟机工具 02 - jstat命令使用

    java8jstat官方文档 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意:使用的j ...

  6. jstat命令总结

    jvm统计信息监控工具 一. jstat是什么 jstat是JDK自带的一个轻量级小工具.全称"Java Virtual Machine statistics monitoring tool ...

  7. jstat命令 -- Java虚拟机监控统计工具

    http://blog.sina.com.cn/s/blog_5f5716580100u76r.html 语法:jstat [generalOption | outputOptions vmid [i ...

  8. java高分局之jstat命令使用(转)

    转自:http://blog.csdn.net/h_025/article/details/52813817 java高分局之jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类 ...

  9. jstat命令查看jvm的GC情况

    jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]  注意!!!:使用的jdk版本是jdk8. ...

  10. jstat命令查看tomcat进程提示进程没找到(PID not found

    今天遇到了一个小问题,我想用jstat命令查看tomcat进程(PID=24493)的内存使用情况,命令如下:jstat -gc 24493. 然后就报错了,错误提示信息为 24493 not fou ...

随机推荐

  1. 「HAOI 2018」染色

    题目链接 戳我 \(Solution\) 观察题目发现恰好出现了\(s\)次的颜色有\(k\)种,不太好弄. 所以我们设\(a[i]\)表示为恰好出现了\(s\)次的颜色有至少\(i\)种的方案数,然 ...

  2. Java容器——Set和顺序存储

    当Set使用自己创建的类型时,存储的顺序如何维护,在不同的Set实现中会有不同,而且它们对于在特定的Set中放置的元素类型也有不同的要求: Set(interface) 存入Set的每个元素都必须是唯 ...

  3. java 调用腾讯云短信api

    依赖: <!--腾讯短信依赖--> <dependency> <groupId>com.github.qcloudsms</groupId> <a ...

  4. Hibernate与MyBaits的区别?

    (1)Hibernate是全自动,而myBatis是半自动,Hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成SQL.而myBat ...

  5. csp2019 Emiya家今天的饭题解

    qwq 由于窝太菜了,实在是不会,所以在题解的帮助下过掉了这道题. 写此博客来整理一下思路 正文 传送 简化一下题意:现在有\(n\)行\(m\)列数,选\(k\)个数的合法方案需满足: 1.一行最多 ...

  6. Detected memory leaks! 解决方法

    Detected memory leaks!Dumping objects ->f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) ...

  7. leetcode 72. 编辑距离

    /***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数: 状态转移: for i: ...

  8. 【Python】格式化输出json

    参考文档: Python JSON JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数 描述 json.dumps  将 Python 对象编码成 JSON 字 ...

  9. mysql的性能优化简介

    mysql性能下降的原因 sql语句本身有问题,或没建索引 索引失效,索引失效的原因本文后面会叙述 关联了过多的表,可能是前期设计缺陷,或者太奇葩的需求 服务器调优及参数设置,例如缓冲.线程等 mys ...

  10. Selenium 2自动化测试实战3(函数、类和方法)

    一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给 ...