1、找出TOMCAT的JVM的进程ID
[work@112542000 ~]$ jps
290 Bootstrap
61213 Jps
2、查看该进程中,最耗费CPU的线程
[work@112542000 ~]$ ps -mp 290 -o THREAD,tid,time | sort -k2 -r | head -n 20
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
work 15.3 - - - - - - 03:11:58
work 1.2 19 - - - - 326 00:15:45
work 0.2 19 - - - - 872 00:03:44
work 0.1 19 - - - - 992 00:01:44
work 0.1 19 - - - - 972 00:01:16
work 0.1 19 - - - - 870 00:01:19
work 0.1 19 - - - - 869 00:01:34
work 0.0 19 - - - - 9993 00:00:00
work 0.0 19 - - - - 997 00:00:06
work 0.0 19 - - - - 9969 00:00:00
work 0.0 19 - - - - 9968 00:00:00
work 0.0 19 - - - - 996 00:00:34
work 0.0 19 - - - - 9960 00:00:00
work 0.0 19 - - - - 995 00:00:00
work 0.0 19 - - - - 9944 00:00:00
work 0.0 19 - - - - 994 00:00:31
work 0.0 19 - - - - 9936 00:00:00
work 0.0 19 - - - - 9934 00:00:26
work 0.0 19 - - - - 9933 00:00:21
3、以TID==326为例,查看该线程的堆栈
首先,将十进制的326转换成十六进制,可以在线转换:
http://tool.oschina.net/hexconvert
结果等于146
使用jstack查询该线程堆栈:
[work@112542000 ~]$ jstack 290 | grep "0x160" -A 10
"Timer-2955" daemon prio=10 tid=0x00007f39d3ecd000 nid=0x1602 in Object.wait() [0x00007f38fb273000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000007c2a0fc40> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Timer-2954" daemon prio=10 tid=0x00007f392481e000 nid=0x15e4 in Object.wait() [0x00007f38fbe7f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
--
"Timer-2132" daemon prio=10 tid=0x00007f39d367d000 nid=0x1603 in Object.wait() [0x00007f3933f46000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000007b44ef3c8> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Timer-2131" daemon prio=10 tid=0x00007f39d3b61800 nid=0x15e6 in Object.wait() [0x00007f3934d54000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
--
"Timer-450" daemon prio=10 tid=0x00007f39d0728800 nid=0x160 in Object.wait() [0x00007f39b1312000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000007bddf8788> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Timer-449" daemon prio=10 tid=0x00007f39ec01f000 nid=0xffc7 in Object.wait() [0x00007f39af5f5000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
参考资料:
http://scau-fly.iteye.com/blog/1884606
http://www.blogjava.net/hankchen/archive/2012/05/09/377735.html
这种文章一定要顶,谢谢了
裴老师微信群多少