JAVA CPU占用情況
1、使用top
命令查看占用高的進(jìn)程
top
--------------------------------------------------------
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8600 root 20 0 4899m 2.6g 18m S 162.8 16.8 37:24.54 java
12406 root 20 0 4054m 637m 18m S 101.8 4.0 1:26.44 java
12681 root 20 0 103m 1336 760 R 27.9 0.0 0:01.85 netstat
10907 root 20 0 192m 5720 1312 R 18.9 0.0 34431:06 supervisord
6065 root 20 0 4120m 882m 7836 S 18.2 5.5 294:44.65 java
5775 nginx 20 0 1198m 75m 9184 R 13.6 0.5 11:21.52 nginx
5774 nginx 20 0 1199m 76m 9188 R 12.9 0.5 10:57.19 nginx
...........
2、根據(jù)pid 查找占用高的線程
top -H -p <pid>
或者
ps -mp <pid> -o THREAD,tid,time
ps -mp 6203 -o THREAD,tid,time | awk '{print $2,$8}' | sort -k1 -r | head -n 15
3响蕴、將線程id 轉(zhuǎn)換為16進(jìn)制
printf "%x\n" <tid>
4、根據(jù)pid 和tid 生成線程快照
jstack <pid> |grep <tid> -A 30
5惠桃、在thread dump中浦夷,要留意下面幾種狀態(tài)
Deadlock (重點(diǎn)關(guān)注) | 死鎖 |
---|---|
Waiting on condition (重點(diǎn)關(guān)注) | 等待資源 |
Waiting on monitor entry (重點(diǎn)關(guān)注) | 等待獲取監(jiān)視器 |
Blocked | 阻塞 |
Runnable | 執(zhí)行中 |
Suspended | 暫停 |
Object.wait() 或 TIMED_WAITING | 對象等待中 |
Parked | 停止 |
使用開源腳本來查看所以Java進(jìn)程的使用情況
wget --no-check-certificate https://raw.github.com/oldratlee/useful-scripts/release/show-busy-java-threads
chmod +x show-busy-java-threads