- 前言
Java Thread Dump 是一個非常有用的應用診斷工具, 通過thread dump出來的信息, 可以定位到你需要了解的線程, 以及這個線程的調用棧. 如果配合linux的top命令, 可以找到你的系統中的最耗CPU的線程代碼段, 這樣才能有針對性地進行優化.
- 場景和實踐
? ? 2.1. 后臺系統一直是在黑盒運行, 除了能暫停一部分任務的執行, 根本無法知道哪些任務耗CPU過多。所以一直以為是業務代碼的問題, 經過各種優化(刪減沒必要的邏輯, 合并寫操作)等等優化, 系統負載還是很高. 沒什么訪問量, 后臺任務處理也就是每天幾百萬的級別, load還是達到了15以上. CPU只有4核,天天收到load告警卻無從下手, 于是乎就被迫來分析一把線程.
2012
-
04
-
13
16
:
30
:
41
Full thread dump OpenJDK
64
-Bit Server VM (
1
.
6
.
0
-b09 mixed mode):
"
TP-Processor12
"
daemon prio=
10
tid=0x00000000045acc00 nid=0x7f19
in
Object.
wait
() [0x00000000483d0000..0x00000000483d0a90]
java.lang.Thread.
State:
WAITING (on object
monitor
)
at java.lang.Object.
wait
(Native Method)
- waiting on <0x00002aaab5bfce70> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
at java.lang.Object.
wait
(Object.
java:
502
)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.
java:
662
)
- locked <0x00002aaab5bfce70> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
at java.lang.Thread.run(Thread.
java:
636
)
"
TP-Processor11
"
daemon prio=
10
tid=0x00000000048e3c00 nid=0x7f18
in
Object.
wait
() [0x00000000482cf000..0x00000000482cfd10]
java.lang.Thread.
State:
WAITING (on object
monitor
)
....
"
VM Thread
"
prio=
10
tid=0x00000000042ff400 nid=0x77de runnable
"
GC task thread#0 (ParallelGC)
"
prio=
10
tid=0x000000000429c400 nid=0x77d9 runnable
"
GC task thread#1 (ParallelGC)
"
prio=
10
tid=0x000000000429d800 nid=0x77da runnable
"
GC task thread#2 (ParallelGC)
"
prio=
10
tid=0x000000000429ec00 nid=0x77db runnable
"
GC task thread#3 (ParallelGC)
"
prio=
10
tid=0x00000000042a0000 nid=0x77dc runnable
"
VM Periodic Task Thread
"
prio=
10
tid=0x0000000004348400 nid=0x77e5 waiting on condition
JNI global
references:
815
Heap
PSYoungGen total
320192K
, used
178216K
[0x00002aaadce00000, 0x00002aaaf1800000, 0x00002aaaf1800000)
eden space
303744K
,
55
% used [0x00002aaadce00000,0x00002aaae718e048,0x00002aaaef6a0000)
from space
16448K
,
65
% used [0x00002aaaf0690000,0x00002aaaf110c1b0,0x00002aaaf16a0000)
to space
16320K
,
0
% used [0x00002aaaef6a0000,0x00002aaaef6a0000,0x00002aaaf0690000)
PSOldGen total
460992K
, used
425946K
[0x00002aaab3a00000, 0x00002aaacfc30000, 0x00002aaadce00000)
object space
460992K
,
92
% used [0x00002aaab3a00000,0x00002aaacd9f6a30,0x00002aaacfc30000)
PSPermGen total
56192K
, used
55353K
[0x00002aaaae600000, 0x00002aaab1ce0000, 0x00002aaab3a00000)
object space
56192K
,
98
% used [0x00002aaaae600000,0x00002aaab1c0e520,0x00002aaab1ce0000)
最后一段是系統的對內存的使用情況.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

