java查看線程狀態(tài) 如何定位消耗CPU最多的線程?
如何定位消耗CPU最多的線程?在Linux系統(tǒng)下,請(qǐng)按照以下步驟進(jìn)行檢查:top-C,顯示系統(tǒng)運(yùn)行的進(jìn)程信息,輸入大寫(xiě)P,進(jìn)程將根據(jù)利用率進(jìn)行排序,可以看到第一列是進(jìn)程ID,如圖所示,消耗CPU最多的
如何定位消耗CPU最多的線程?
在Linux系統(tǒng)下,請(qǐng)按照以下步驟進(jìn)行檢查:
top-C,顯示系統(tǒng)運(yùn)行的進(jìn)程信息,輸入大寫(xiě)P,進(jìn)程將根據(jù)利用率進(jìn)行排序,可以看到第一列是進(jìn)程ID,如圖所示,消耗CPU最多的進(jìn)程ID是5986:
top-HP 5986,顯示進(jìn)程的線程運(yùn)行信息列表,繼續(xù)輸入大寫(xiě)字母p根據(jù)CPU利用率對(duì)其進(jìn)行排序,您可以看到第一行,進(jìn)程5986中消耗CPU最多的線程ID是6021:
下一步,讓我們看看您的應(yīng)用程序做了什么。如果是Java應(yīng)用程序,要獲得更多與線程相關(guān)的信息,可以將上面的進(jìn)程ID轉(zhuǎn)換為十六進(jìn)制,因?yàn)樵诙褩V械腏av中,存儲(chǔ)線程的ID是十六進(jìn)制的。您可以直接命令“printf”%Xn“6021”,輸出:1785:
接下來(lái),您可以通過(guò)線程ID(十六進(jìn)制)查看堆棧信息。有許多工具可以查看堆棧信息。這里我使用jstack命令“jstack 5986 | grep ”0x1785 “-C5--輸出如下:
通過(guò)以上步驟,您可以知道當(dāng)前系統(tǒng)中占用CPU最多的線程以及該線程在做什么,希望能夠解決這個(gè)問(wèn)題。
java線程死鎖和內(nèi)存溢出,該怎么解決?
Java線程死鎖或線程太多:
1。獲取java進(jìn)程ID
PS-EF | grep java
2。導(dǎo)出線程堆棧(32494被上一步中找到的進(jìn)程ID替換)
jstack-L 32494>>/usr/local/client/log20180116。日志
3。生成導(dǎo)出。日志從上一步復(fù)制文件到本地機(jī)器,然后用記事本打開(kāi),檢查哪個(gè)線程有大量重復(fù),然后結(jié)合業(yè)務(wù)排除。(例如,如果堆棧的60%是由其中一個(gè)類(lèi)的方法引起的,則該方法可能會(huì)阻塞。)