查看jvm 启动参数等信息
jinfo pid
【内存】打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量
jmap -histo pid
jmap -histo:live pid
/**
每行意义如下
第一列,序号,无实际意义
第二列,对象实例数量
第三列,对象实例占用总内存数,单位:字节
第四列,对象实例名称
最后一行,总实例数量与总内存占用数
*/
【GC】 每5秒一次显示进程号为1024的java进成的GC情况
jstat -gc 1024 5000
jstat -gcutil 23483 250
/**
每行意义如下
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 : 最大持有次数限制
*/
【GC】将java进程的对象实例数和占用内存情况输出到文件(一遍多次输出进行对比)
jmap -histo pid>a.log
【GC】打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
jmap -heap pid
【GC】告诉jvm在控制台打印PID为:23483的gc情况,间隔250毫秒打印一次,一共打印7次
jstat -gcutil 23483 250 7
【GC】dump heap 文件,查看dump文件内容
//dump heap文件
jmap -dump:format=b,file=filename pid
//只dump heap活的对象
jmap -dump:live,format=b,file=filename pid
//查看dump文件
jhat -J-Xmx1024M filename
//指定一个启动的端口
jhat -J-Xmx1024M -port:7001 filename
【线程】 jstack 是sun JDK 自带的工具,通过该工具可以看到JVM 中线程的运行状况,包括锁等待,线程是否在运行
jstack pid
【GC】打印一些持久代上的内存使用状态,有“活”的,有“死”的,会造成挂起,不常用
jmap -permstat 30621
【线程】将jvm的所有线程dump到文件
jstack pid > stack.log