生產(chǎn)環(huán)境下,如果出現(xiàn)此類問題時扼倘,可通過線程的堆棧,查找、定位問題所在。
提供如下三種辦法:
一手销、通過top和jstack
--查看某個進程的情況:cpu、內(nèi)存等
top -p 26162
--查看linux中某個進程內(nèi)部的線程情況
top -H -b -n 1 -p 26162 | head -n 100
命令解釋:
top命令:
-p :進程號
-b :以批次的方式執(zhí)行top
-n :與-b配合使用图张,表示需要進行幾次top命令的輸出結(jié)果
-H :查看進程的內(nèi)部的線程情況
head命令:
-n 取前幾行
jstack命令: 查看當前線程的代碼堆棧
-F:Force a stack dump when 'jstack [-l] pid' does not respond.
-l:Long listing. Prints additional information about locks such as list of owned java.util.concurrent ownable synchronizers.
-m:prints mixed mode (both Java and native C/C++ frames) stack trace.
-h:prints a help message.
top命令中的pid和jstack中的nid的關(guān)系
1锋拖、pid是10進制的
2、nid是16進制的
二埂淮、通過arthas
官網(wǎng):https://arthas.aliyun.com/doc/idea-plugin.html
arthas的功能很強大姑隅,具體可以查看官網(wǎng)写隶。
解決cpu倔撞、死鎖之類的問題時,以下命令比較常用
dashboard命令(dashboard 1)
thread命令(thread -n 10)
三慕趴、通過show-busy-java-threads?
下載地址:https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#-show-busy-java-threads
切換到:/opt/abc/useful-scripts-release-2.x/bin
執(zhí)行命令:./show-busy-java-threads
四痪蝇、優(yōu)缺點比較
1、top和jstack 冕房,linux和java的自帶命令躏啰,不需要額外安裝;操作稍微復雜
2耙册、arthas 需要單獨啟動一個服務(wù)给僵;需要熟悉arthas的命令
3、show-busy-java-threads 單獨上傳一個腳本即可详拙,操作比較簡單帝际,是top和jstack的封裝