jdk1.6 相关性能分析工具使用

之前一直从事.net方向的开发工作,一直是用windbg做问题定位工具,突然转向java有两眼一抹黑的感觉。前段时间出了次故障后看同事用些java命令看thread stack和heap dump后来有上网看了些资料,大概总结下吧,以后用起来方便。以下这些指令都是随sun jdk1.6发布,安装后就有。

1. jps 查看当前系统正在运行的java进程信息

常用参数 -lm和-lvmm
-lm 可查看运行时输入的jar包信息
-lvmm 可查看jar信息和启动是指定的最大和最小jvm堆大小

2. jstat 查询java进程gc信息(类似.net clr的性能计数器)

用法和主要参数:
jstat -gcutil
查询java进程gc信息,包括新生代、老生代内存占用百分比gc次数和gc时间还有full gc次数和时间总gc时间具体的每项含有有:
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比

jstat -class
查询当前进程jvm load的class文件明细

3. jstack 查询java进程当前线程堆栈信息(类似.net SOS.dll提供的CLRStack命令)

用法和主要参数
jstack -l
打印当前java进程所以线程堆栈信息,不hung进程
jstack -F
hung进程

4. jmap 查询java进程堆内存使用情况,可以抓内存的dump(类似.net SOS.dll提供的dumpheap)

用户和主要参数
jmap -heap
输出当前堆的概要信息
jmap -histo
输出当前进程内所有对象的统计信息包括对象占用内存和对象个数(类似windbg dumpheap -stat)
jmap -histo:live
输出进程当前状态存活对象统计信息
jmap -dump:live,format=b,file=heap.bin
挂到进程抓一个内存的coredump 保存为heap.bin
heap.bin就可以用visualvm工具分析了

你可能感兴趣的:(java问题定位)