1. 程式人生 > >JAVA Linux 排查CPU 過高的方法

JAVA Linux 排查CPU 過高的方法

原文:https://blog.csdn.net/zhanglh046/article/details/50443528 

方法一
1 ps -ef | grep java 查詢java 程序號
2 top -p PID -H 觀察佔用CPU較多的執行緒
3 找出CPU消耗較多的執行緒id,如15844,將15844轉換為16進位制0x3de4,注意是小寫哦
4 使用jstack PID |grep -A 10 0x3de4來查詢出具體的執行緒狀態。


方法二
觀察cpu 使用情況

ps -mp 21896 -o THREAD,tid,time | sort -rn

將需要的執行緒ID轉換為16進位制格式:

[[email protected] logs]# printf "%x\n" 21520
e18

最後列印執行緒的堆疊資訊:

[[email protected] logs]# jstack 2633 |grep e18 -A 30
jstack 21896 | grep 0x5599 -A 30

各個指標:
(1)load average:此值反映了任務佇列的平均長度;如果此值超過了CPU數量,則表示當前CPU數量不足以處理任務,負載過高
(2)%us:使用者CPU時間百分比;如果此值過高,可能是程式碼中存在死迴圈、或是頻繁GC等
(3)%sy:系統CPU時間百分比;如果此值過高,可能是系統執行緒競爭激烈,上下文切換過多,應當減少執行緒數
(4)%wa:等待輸入、輸出CPU時間百分比;如果此值過高,說明系統IO速度過慢,CPU大部分時間都在等待IO完成
(5)%hi:硬體中斷CPU百分比;當硬體中斷髮生時,CPU會優先去處理硬體中斷;比如,網絡卡接收資料會產生硬體中斷
(6)swap used:被使用的swap;此值過高代表系統因為記憶體不足在進行頻繁的換入、換出操作,這樣會影響效率,應增大記憶體量
(7)%CPU:程序使用CPU的百分比;此值高表示CPU在進行無阻塞運算等