【1】查到程序对应java进程的进程号
ps –ef|grep [程序关键字]|awk '{if($3==1)print$2}'
示例:ps –ef|grep trade|awk '{if($3==1)print $2}'
【2】将进程的线程信息打印至文件中
top -n1b -H -p [pid]> [文件名]
示例:top -n1b -H -p 235795> toplog.txt
【3】过滤提取有用信息(默认排序为CPU使用率排序,可以在第二步时变更为所需排序)
tail -n +7 [top文件名] |awk '{print$1,$9,$10,$11}' > [新生成文件名]
示例:tail -n +7 toplog.txt |awk '{print $1,$9,$10,$11}' >toplog.txt
【4】提取线程堆栈信息到堆栈文件
/usr/java/jdk1.6.0_45/bin/jstack–l [pid] > [线程堆栈文件名称]
示例:/usr/java/jdk1.6.0_45/bin/jstack -l 21180 >jstacklog.txt
【5】线程id进制转换,锁定线程
分析(3)中得到文件,将cpu消耗高的或者时间耗时长的线程id取到(3)中所得文件第一列(即进程编号PID),将其由10进制转换为16进制。
如:
【6】通过(5)中得到的十六进制的线程编号,然后在(4)中得到文件中检索16进制得到的线程id,可得到其堆栈信息,从而锁定线程,