jstat : 虚拟机统计信息监视工具
功能描述
jstat(JVM Statistics Monitoring Tool) 用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机进程中类装载、内存、垃圾收集、JIT编译等运行数据。 |
jstat命令格式
jstat[option vmid[interval[s|ms][count]]] |
参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每1000毫秒查询
一次进程9344垃圾收集状况,一共查询10次,那命令应当是:
jstat -gcutil 9344 1000 10
jstat工具主要选项
选项option代表着用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集、运行期编译状况选项 | 作用 |
-class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监视Java堆状况,包括Eden区、两个survivor区、老年代、元空间的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间 |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间 |
-gcold | 监视老年代状况 |
-gcoldcapacity | 监视内容与-gcold基本相同,输出主要关注用到的最大、最小空间 |
-gcmetacapacity |
输出元数据用到的最大、最小空间 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
Example
依然以pid是9344为例
jstat -class pid :
监视类装载、卸载数量、总空间以及类装载所耗费的时间
Loaded : 加载class的数量
Bytes: 加载的class所占空间大小 Unloaded: 未加载类的数量 Bytes:未加载的类所占空间大小 Time: 耗时 |
jstat -gc pid:
垃圾回收统计
|
jstat -gccapacity pid:
堆内存统计
|
jstat -gcutil pid:
总结垃圾回收统计
|
这里出现一个元空间的概念,什么是元空间呢?
其实元空间的本质和永久代类似,都是对JVM规范中方法区的实现,不过元空间与永久代之间的最大区别在于,元空间 不在虚拟机中,而是使用本地内存,因此,默认情况下,元空间的大小仅受本地内存
另外,
方法区(method area)只是
JVM规范中定义的一个概念,用于存储类信息、常量池、静态变量、JIT编译后的代码等数据,具体放在哪里,不同的实现可以放在不同的地方。而
永久代是
Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西。1.8中
永久代被彻底移除,取而代之的是另一块与堆不相连的本地内存——元空间
|
jstat -gccause pid:
垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
|
jstat -gcnew pid:
新生代垃圾回收统计
|
jstat -gcnewcapacity pid:
新生代内存统计
|
jstat -gcold 9344:
老年代垃圾回收统计
|
jstat -gcoldcapacity pid:
老年代内存统计
|
jstat -gcmetacapacity pid:
元数据空间统计
|
jstat -compiler pid:
JIT编译器过的方法、耗时等.
|
jstat -printcompilation pid:
已经被JIT编译过的方法
|
参考:
https://blog.csdn.net/maosijunzi/article/details/46049117
https://docs.oracle.com/javase/6/docs/technotes/tools/share/jstat.html
https://yq.aliyun.com/articles/579458