1. 程式人生 > >故障排查之一:高CPU佔用

故障排查之一:高CPU佔用

http://www.blogjava.net/hankchen/archive/2012/05/09/377735.html

一個應用佔用CPU很高,除了確實是計算密集型應用之外,通常原因都是出現了死迴圈。

根據top命令,發現PID為28555的Java程序佔用CPU高達200%,出現故障。

通過ps aux | grep PID命令,可以進一步確定是tomcat程序出現了問題。但是,怎麼定位到具體執行緒或者程式碼呢?

首先顯示執行緒列表:

ps -mp pid -o THREAD,tid,time

 

找到了耗時最高的執行緒28802,佔用CPU時間快兩個小時了!

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

printf "%x\n" tid

 

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

jstack pid |grep tid -A 30

 

最後,總結下排查CPU故障的方法和技巧有哪些:

1、top命令:Linux命令。可以檢視實時的CPU使用情況。也可以檢視最近一段時間的CPU使用情況。

2、PS命令:Linux命令。強大的程序狀態監控命令。可以檢視程序以及程序中執行緒的當前CPU使用情況。屬於當前狀態的取樣資料。

3、jstack:Java提供的命令。可以檢視某個程序的當前執行緒棧執行情況。根據這個命令的輸出可以定位某個程序的所有執行緒的當前執行狀態、執行程式碼,以及是否死鎖等等。

4、pstack:Linux命令。可以檢視某個程序的當前執行緒棧執行情況。