1、找出TOMCAT的JVM的进程ID
[work@112542000 ~]$ jps 290 Bootstrap <span style="color: #ff6600;">61213 Jps </span>
1
2
3
4
|
[
work
@
112542000
~
]
$
jps
290
Bootstrap
<
span
style
=
"color: #ff6600;"
>
61213
Jps
<
/
span
>
|
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 <span style="color: #ff6600;">work 1.2 19 - - - - 326 00:15:45 </span>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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[
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
<
span
style
=
"color: #ff6600;"
>
work
1.2
19
-
-
-
-
326
00
:
15
:
45
<
/
span
>
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) -- <span style="color: #ff6600;">"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) </span> "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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
[
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
)
--
<
span
style
=
"color: #ff6600;"
>
"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
)
<
/
span
>
"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