1、jstack
用法jstack [option] pid
-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)
找出进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid
printf “%x\n” pid 得到pid的十六进制
jstack pid | grep ` printf “%x\n” pid `
要留意下面几种状态
死锁,Deadlock(重点关注)
等待资源,Waiting on condition(重点关注)
? 等待获取监视器,Waiting on monitor entry(重点关注)
阻塞,Blocked(重点关注)
? 执行中,Runnable
? 暂停,Suspended
? 对象等待中,Object.wait() 或 TIMED_WAITING
? 停止,Parked
2、jmap
jmap pid (64位机器jmap -permstat pid)
jmap -heap pid查看进程堆内存使用情况
jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jmap -dump:format=b,file=dumpFileName pid 生成dump文件
例如jmap -dump:format=b,file=/tmp/dump.dat 21711
3、jstat
jstat -gc pid 查看gc情况
原文:http://my.oschina.net/u/565871/blog/296559