一個應(yīng)用占用CPU很高精钮,除了確實(shí)是計(jì)算密集型應(yīng)用之外,通常原因都是出現(xiàn)了死循環(huán)剃斧。
1.根據(jù)top命令轨香,發(fā)現(xiàn)PID為28555的Java進(jìn)程占用CPU高達(dá)200%,出現(xiàn)故障幼东。
2.根據(jù)PID定位出問題的線程
首先顯示線程列表:
ps -mp pid -o THREAD,tid,time
找到了耗時最高的線程28802臂容,占用CPU時間快兩個小時了!
3.然后將需要的線程ID轉(zhuǎn)換為16進(jìn)制格式:
`printf "%x\n" tid`
4.最后打印線程的堆棧信息:
`jstack pid |grep tid -A 60`
找到出現(xiàn)問題的代碼了根蟹!
總結(jié)下排查CPU故障的方法和技巧有哪些:
1脓杉、top命令:Linux命令〖虼可以查看實(shí)時的CPU使用情況球散。也可以查看最近一段時間的CPU使用情況。
2散庶、PS命令:Linux命令蕉堰。強(qiáng)大的進(jìn)程狀態(tài)監(jiān)控命令”辏可以查看進(jìn)程以及進(jìn)程中線程的當(dāng)前CPU使用情況屋讶。屬于當(dāng)前狀態(tài)的采樣數(shù)據(jù)。
3须教、jstack:Java提供的命令皿渗。可以查看某個進(jìn)程的當(dāng)前線程棧運(yùn)行情況。根據(jù)這個命令的輸出可以定位某個進(jìn)程的所有線程的當(dāng)前運(yùn)行狀態(tài)乐疆、運(yùn)行代碼划乖,以及是否死鎖等等。
4诀拭、pstack:Linux命令迁筛。可以查看某個進(jìn)程的當(dāng)前線程棧運(yùn)行情況耕挨。
轉(zhuǎn)自:http://www.blogjava.net/hankchen