測者的效能測試手冊:診斷優化找出消耗CPU效能的內鬼
每次提起效能測試,都是開始於指令碼、壓力,然後各種監控,最後的最後就是分析。每次到了最後一個環境,所有大牛都說是一個很複雜的過程一兩句話說不清楚。讓人陷入了無盡的遐想~~~~~。
今天,測試就告訴你如何找到Java消耗CPU的程序是怎麼被找到的。
傳統的手段
當遇見CPU效能飆升到接近100的時候,首先需要進入對應的伺服器,然後通過如下一連串的動作找到最耗資源的罪魁禍首。
top發現最好是的程序
在shell介面中,輸入top,找到最消耗CPU的那個Java程序。記錄下PID號碼。
然後通過:
-
top - H - p pid
命令檢視對應PID程序下的執行緒,找到最耗資源的執行緒的PID。將其通過shell轉成十六進位制:
-
printf ”% x\n “ pid
-
% x ,表示 十六進位制, \n 是換行
應用jstack針對上面耗時的執行緒進行分析
-
jstack PID (十六進位制) 1 > xxx . tmp
然後開啟xxx.tmp檔案,搜尋PID(十六進位制)號碼,下面的堆疊就是這個執行緒打出來的。排查問題就可以從這些堆疊資訊開整找到問題。
一個一勞永逸的工具
show-busy-java-threads用於快速排查Java的CPU效能問題(top us值過高),自動查出執行的Java程序中消耗CPU多的執行緒,並打印出其執行緒棧,從而確定導致效能問題的方法呼叫。
GitHub地址:https://github.com/oldratlee/useful-scripts
在伺服器端,克隆專案: git clone git://github.com/oldratlee/useful-scripts.git
-
cd useful - scripts
然後就可以看到了show-busy-jaa-threads工具了。其中,該Github倉庫有一個release釋出分支,裡面包含的都是功能穩定的指令碼,建議使用的時候切換到該分支。方法如下:
-
# 使用Release分支的內容
-
git checkout release
-
# 更新指令碼
-
git pull
進入userful-scripts目錄後,輸入 ./ show - busy - java - threads 就可以使用這個工具進行上述消耗CPU的優化分析了。其他show-busy-java-threads工具的用法如下:
其實優化是效能測試的根本目標,找到問題後分析問題才是關鍵,通過各種手段找到更詳細的問題,找到更多的資料和RD一起分析。