最近在github看到個挺實用的工具,用來定位CPU高的原因是很有用的,下面一起來看看吧~
github:https://github.com/oldratlee/useful-scripts
下面主要介紹show-busy-java-threads的一些用法,用於快速排查Java的CPU性能問題(top us值過高),自動查出運行的Java進程中消耗CPU多的線程,並打印出其線程棧,從而確定導致性能問題的方法調用。
1、top oder by with P:1040 // 首先按進程負載排序找到 axLoad(pid)
2、top -Hp 進程PID:1073 // 找到相關負載 線程PID
3、printf “0x%x
”線程PID: 0x431 // 將線程PID轉換為 16進制,為後面查找 jstack 日誌做準備
4、jstack 進程PID | vim /十六進制線程PID - // 例如:jstack 1040|vim /0x431 -
source <(curl -fsSL https://raw.githubusercontent.com/oldratlee/useful-scripts/release-2.x/test-cases/self-installer.sh)
wget --no-check-certificate https://github.com/oldratlee/useful-scripts/archive/release-2.x.zip
unzip release-2.x.zip
./show-busy-java-threads
可以看到,一鍵直接定位異常代碼行
#從所有JAVA線程找出最消耗CPU的線程,默認5個
show-busy-java-threads.sh
show-busy-java-threads.sh -c <要顯示的線程棧數>
show-busy-java-threads.sh -c <要顯示的線程棧數> -p <指定的JAVA process>
show-busy-java-threads.sh -a <輸出記錄到文件>
show-busy-java-threads.sh -t <重複執行的次數> -i <重複執行的間隔秒數>