jdk自身附带了很多实用的工具,以下是常用的几个:
jps 显示所有虚拟机进程
-q:只列出id号
-m:id号和主类以及传递给主类的参数
-l:id号及主类的全名
-v:id号,主类,及完整的虚拟机启动参数
jstat 虚拟机统计信息监控
jstat -gc pid
可以显示gc的信息,查看gc的次数,及时间。
jstat -gc pid interval count
每隔interval时间,总共count次,显示gc的信息,查看gc的次数,及时间。interval:毫秒
S0C:年轻代中第一个survivor的总容量 (字节)
S0U:年轻代中第一个survivor目前已使用空间 (字节)
S1C:年轻代中第二个survivor的总容量 (字节)
S1U:年轻代中第二个survivor目前已使用空间 (字节)
EC:年轻代中Eden的总容量 (字节)
EU:年轻代中Eden目前已使用空间 (字节)
OC:Old代的总容量 (字节)
OU:Old代目前已使用空间 (字节)
MC: MateSpace目前申请的直接内存总容量
MU: MateSpace目前使用的直接内存
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 : 最大持有次数限制
sun 官方文档 http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
jinfo 虚拟机配置信息
jinfo 28606
/ jinfo -flags 28606
查看虚拟机配置信息
jmap 生成内存快照
jmap -dump:format=b,file=app.bin 28606
生成快照文件到 app.bin中
jhat 快照内存分析工具
jhat app.bin
看到Server is ready, 说明已经分析完毕,通过浏览器http://localhost:7000可以进行浏览分析结果。
jstack:生成堆栈快照
-F:当正常输入的请求不被响应的时候,强制输出线程堆栈
-l:除了堆栈以外,显示锁的信息
-m:如果调用了本地方法,显示本地方法调用堆栈
可以用来查看死循环啊,死锁之类。
也可以用代码直接打印。