JAVA線上常見問題排查

1.線上CPU飆高排查思路

一般常見的原因主要是:
①死循環(huán)(while / 遞歸 / for循環(huán)相關(guān)等 )

②鎖相關(guān)引發(fā)( CAS自旋鎖過多 / 線程死鎖 / 數(shù)據(jù)庫死鎖引發(fā)程序 )

③線程阻塞 / 網(wǎng)絡(luò)IO (遠(yuǎn)程調(diào)用阻塞線程不能釋放 / 持續(xù)任務(wù)超時等待 )
/或者數(shù)據(jù)庫連接并發(fā)數(shù)資源耗盡

④JAVA程序頻繁FULL GC(大量對象被引用,無法及時進(jìn)行垃圾回收等)
/ 未合理分配新生代和老年代的比例導(dǎo)致
/ 或者服務(wù)器CPU/內(nèi)存等資源無法支撐線上程序運(yùn)行
/ 頻繁創(chuàng)建超大類型對象或者上傳文件過大過多導(dǎo)致內(nèi)存耗盡

1.先使用TOP命令查看占用CPU比較高的進(jìn)程,執(zhí)行top命令,查看所有進(jìn)程占系統(tǒng)CPU的排序
2.然后用 top -H -p pid 來找到cpu使用率比較高的線程
3.控制臺執(zhí)行 printf '0x%x' tid 線程 id 二進(jìn)制轉(zhuǎn)化 成16 進(jìn)制
4.使用 jstack pid | grep tid 找到線程堆棧 (tid為步驟3得到的結(jié)果)

2.阿里巴巴開源診斷工具 arthas

# 執(zhí)行以下命令,下載arthas運(yùn)行jar包

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar 

# 如果Linux未配置Java環(huán)境變量 可以使用使用 whereis java查找bin路徑,指定路徑執(zhí)行
# 例如: /usr/bin/java -jar arthas-boot.jar
啟動成功如圖:

3.使用開源工具 show-busy-java-threads (需要下載)

# 主要功能:
show-busy-java-threads
1.從所有運(yùn)行的Java進(jìn)程中找出(5個缺?。┳钕腃PU的線程,打印線程棧信息
2.缺省會自動從所有的Java進(jìn)程中找出最消耗CPU的線程,這樣用更方便
3.手動指定分析的Java進(jìn)程Id,以保證只會顯示單個Java進(jìn)程的信息
show-busy-java-threads -p <指定的Java進(jìn)程Id>
show-busy-java-threads -c <要顯示的線程棧數(shù)>

具體使用參考一下執(zhí)行語句,逐條執(zhí)行即可

命令獲?。?wget --no-check-certificate https://raw.github.com/oldratlee/useful-scripts/release-2.x/bin/show-busy-java-threads
下載完畢之后賦予執(zhí)行權(quán)限
chmod +x show-busy-java-threads
開始執(zhí)行
./show-busy-java-threads
執(zhí)行下載

運(yùn)行結(jié)果如圖:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容