通過Arthas排查Java程序CPU佔用過高問題
需要工具包:arthas-packaging-3.2.0-bin.zip
模擬問題
使用如下代碼製造一個CPU佔用100%的情況
/**
* 製造一個死循環,實現cpu100%
*/
@RequestMapping("/lock")
public void lock(){
System.out.println("開始死鎖操作。。。。");
StringBuffer stringBuffer = new StringBuffer();
while(true){
String uuid = UUID.randomUUID().toString();
}
}
這是一個SpringBoot的應用,通過使用命令curl http://xxx:xxx/lock
,即可觸發
排查步驟
-
上傳arthas-packaging-3.2.0-bin.zip到服務器,創建目錄
arthas
並將zip
包拷貝到該目錄下,解壓 -
使用
top
命令,查看當前CPU的情況,記錄下佔用率最高的進程pid
-
下記錄下cpu佔用過高的pid(本例中是2864)
-
執行
java -jar arthas-boot.jar
- 輸入
1
(序號),根據實際情況選擇對應的序號,會進入arthas命令行的執行程序中
-
輸入
thread -n 3
會列舉出當前三個佔用CPU最高的線程,根據圖中可以定位到具體的業務代碼行數
- 除此之外,也可以使用
dashboard
命令查看當前的Java程序運行情況