楠木軒

分享一個實用腳本--一鍵定位服務器CPU佔用100%問題

由 寸建宇 發佈於 科技

最近在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 <重複執行的間隔秒數>