目录
查看VM内存中三代(young/old/perm)对象的使用和占用大小
[Cannot connect to core dump or remote debug server. Use jhsdb jmap instead](#Cannot connect to core dump or remote debug server. Use jhsdb jmap instead)
[ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...](#ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...)
jmap
查看堆使用情况
bash
jmap -heap [pid]
查看类列表,包含实例数、占用内存大小
bash
jmap -histo [pid]
如果带上live则只统计活对象:
bash
jmap -histo:live [pid]
生成jvm的堆转储快照dump文件
bash
jmap -dump:format=b,file=dumpFileName [pid]
jstat
查看JVM统计信息,类装载、内存、垃圾收集、JIT编译等运行数据。
bash
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
查看gc的信息,查看gc的次数,及时间
bash
jstat -gc [pid]
信息说明:
- S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
- S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
- S0U: 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
- S1U: 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
- EC: 年轻代中Eden的容量 (字节)
- EU: 年轻代中Eden目前已使用空间 (字节)
- OC: 老年代的容量 (字节)
- OU: 老年代目前已使用空间 (字节)
- MC: metaspace(元空间)的容量 (字节)
- MU: metaspace(元空间)目前已使用空间 (字节)
- CCSC:当前压缩类空间的容量 (字节)
- CCSU:当前压缩类空间目前已使用空间 (字节)
- YGC: 从应用程序启动到采样时年轻代中gc次数
- YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
- FGC: 从应用程序启动到采样时老年代(全gc)gc次数
- FGCT:从应用程序启动到采样时老年代(全gc)gc所用时间(s)
- GCT: 从应用程序启动到采样时gc用的总时间(s)
查看VM内存中三代(young/old/perm)对象的使用和占用大小
bash
jstat -gccapacity [pid]
信息说明:
- NGCMN: 年轻代(young)中初始化(最小)的大小(字节)
- NGCMX: 年轻代(young)的最大容量 (字节)
- NGC: 年轻代(young)中当前的容量 (字节)
- S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
- S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
- EC: 年轻代中Eden的容量 (字节)
- OGCMN:老年代中初始化(最小)的容量大小 (字节)
- OGCMX:老年代的最大容量(字节)
- OGC: 老年代当前新生成的容量 (字节)
- OC: 老年代的容量 (字节)
- MCMN: metaspace(元空间)中初始化(最小)的大小 (字节)
- MCMX: metaspace(元空间)的最大容量 (字节)
- MC: metaspace(元空间)当前新生成的容量 (字节)
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC: 当前压缩类空间大小
- YGC: 从应用程序启动到采样时年轻代中gc次数
- FGC: 从应用程序启动到采样时老年代(全gc)gc次数
查看元数据空间统计
bash
jstat -gcmetacapacity [pid]
信息说明:
- MCMN: 最小元数据容量
- MCMX: 最大元数据容量
- MC: 当前元数据空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC: 当前压缩类空间大小
- YGC: 从应用程序启动到采样时年轻代中gc次数
- FGC: 从应用程序启动到采样时老年代(全gc)gc次数
- FGCT: 从应用程序启动到采样时老年代(全gc)gc所用时间(s)
- GCT: 从应用程序启动到采样时gc用的总时间(s)
查看年轻代对象的信息
bash
jstat -gcnew [pid]
信息说明:
- S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
- S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
- S0U: 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
- S1U: 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
- TT: 持有次数限制
- MTT: 最大持有次数限制
- DSS: 期望的幸存区大小
- EC: 年轻代中Eden的容量 (字节)
- EU: 年轻代中Eden目前已使用空间 (字节)
- YGC: 从应用程序启动到采样时年轻代中gc次数
- YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
查看年轻代对象的信息及其占用量
bash
jstat -gcnewcapacity [pid]
信息说明:
- NGCMN: 年轻代(young)中初始化(最小)的大小(字节)
- NGCMX: 年轻代(young)的最大容量 (字节)
- NGC: 年轻代(young)中当前的容量 (字节)
- S0CMX: 年轻代中第一个survivor(幸存区)的最大容量 (字节)
- S0C: 年轻代中第一个survivor(幸存区)的容量 (字节)
- S1CMX: 年轻代中第二个survivor(幸存区)的最大容量 (字节)
- S1C: 年轻代中第二个survivor(幸存区)的容量 (字节)
- ECMX: 年轻代中Eden的最大容量 (字节)
- EC: 年轻代中Eden的容量 (字节)
- YGC: 从应用程序启动到采样时年轻代中gc次数
- FGC: 从应用程序启动到采样时old代(全gc)gc次数
查看老年代对象的信息
bash
jstat -gcold [pid]
信息说明:
- MC: metaspace(元空间)的容量 (字节)
- MU: metaspace(元空间)目前已使用空间 (字节)
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- OC: Old代的容量 (字节)
- OU: Old代目前已使用空间 (字节)
- YGC: 从应用程序启动到采样时年轻代中gc次数
- FGC: 从应用程序启动到采样时old代(全gc)gc次数
- FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
- GCT: 从应用程序启动到采样时gc用的总时间(s)
查看老年代对象的信息及其占用量
bash
jstat -gcoldcapacity [pid]
信息说明:
- OGCMN:Old代中初始化(最小)的大小 (字节)
- OGCMX:Old代的最大容量(字节)
- OGC: Old代当前新生成的容量 (字节)
- OC: Old代的容量 (字节)
- YGC: 从应用程序启动到采样时年轻代中gc次数
- FGC: 从应用程序启动到采样时old代(全gc)gc次数
- FGCT: 从应用程序启动到采样时old代(全gc)gc所用时间(s)
- GCT: 从应用程序启动到采样时gc用的总时间(s)
查看最近一次GC统计和原因
bash
jstat -gccause [pid]
信息说明:
- LGCC:最后一次GC原因
- GCC: 当前GC原因(No GC 为当前没有执行GC)
jps
查看当前运行中java的进程
bash
jps
查看进程启动时传递给main()的参数
bash
jps -m
查看进程启动时的JVM参数
bash
jps -v
部分报错情况
Cannot connect to core dump or remote debug server. Use jhsdb jmap instead
jdk版本原因所导致的,在jdk8以后需要加上 jhsdb 以运行(注意这里的格式):
bash
jhsdb jmap --heap --pid [pid]
ERROR: ptrace(PTRACE_ATTACH, ..) failed for 30865: Operation not permitted...
新版的Linux系统(Ubuntu 11.04之后会出现这种问题)加入了 ptrace-scope 机制。这种机制为了防止用户访问当前正在运行的进程的内存和状态,而一些调试软件本身就是利用 ptrace 来进行获取某进程的内存状态的(包括GDB),所以在新版本的Linux系统,默认情况下不允许再访问了, 可以临时开启(注意权限):
bash
echo 0 > /proc/sys/kernel/yama/ptrace_scope
永久修改:
bash
vi /etc/sysctl.d/10-ptrace.conf
kernel.yama.ptrace_scope = 0