jmap 导出dump_jstat和jmap

之前的文章讲了jstack的用法,这篇文章讲下其他两种方便排查问题的命令jstat、jmap。

jstat

jstat对于查看Jvm的堆栈信息很有用。能够查看eden,survivor,old,perm等heap的capacity,utility信息,对于查看系统是不是有内存泄漏以及参数设置是否合理有不错的意义。

jstat -gc pid

可以显示gc的信息,查看gc的次数,及时间。

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

jstat -gccapacity pid

可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是当前perm内存占用量。其他的可以根据这个类推, OC是old内存的占用量。

stat -gcutil pid

统计gc信息统计。

jstat -gcnew pid

年轻代对象的信息。

jstat -gcnewcapacity pid

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

jstat -gcold pid

old代对象的信息。

stat -gcoldcapacity pid

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

jstat -gcpermcapacity pid

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

jstat -class pid

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

stat -printcompilation pid

当前VM执行的信息。

名称解释

  • S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
  • S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  • S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  • EC:年轻代中Eden(伊甸园)的容量 (字节)
  • EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
  • OC:Old代的容量 (字节)
  • OU:Old代目前已使用空间 (字节)
  • PC:Perm(持久代)的容量 (字节)
  • PU:Perm(持久代)目前已使用空间 (字节)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT:从应用程序启动到采样时gc用的总时间(s)
  • NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
  • NGCMX:年轻代(young)的最大容量 (字节)
  • NGC:年轻代(young)中当前的容量 (字节)
  • OGCMN:old代中初始化(最小)的大小 (字节)
  • OGCMX:old代的最大容量 (字节)
  • OGC:old代当前新生成的容量 (字节)
  • PGCMN:perm代中初始化(最小)的大小 (字节)
  • PGCMX:perm代的最大容量 (字节)
  • PGC:perm代当前新生成的容量 (字节)
  • S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
  • S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
  • E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
  • O:old代已使用的占当前容量百分比
  • P:perm代已使用的占当前容量百分比
  • S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
  • S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
  • ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
  • DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
  • TT: 持有次数限制
  • MTT : 最大持有次数限制

jmap

这个是用来查看jvm当前的heap dump的。可以看出当前jvm中各种对象的数量,所占空间等等。尤其值得一提的是这个命令可以导出一份binary heap dump的bin文件,这个文件能够找出潜在的内存泄漏的地方。

histo

jmap -histo pid 展示class的内存情况

其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。

541aae3371d20d384fc5a652d37667eb.png

heap

jmap -heap pid 展示pid的整体堆信息

fe88471b87eb5c273279c16fdc39ec6c.png

dump

导出的文件可以供分析用,比如jhat或者mat,以便查找内存溢出原因。

这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用, 线上系统慎用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值