這篇文章主要介紹因Java應用造成CPU過高怎么排查,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、陽明網(wǎng)絡推廣、小程序制作、陽明網(wǎng)絡營銷、陽明企業(yè)策劃、陽明品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供陽明建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
使用top命令查詢服務cpu使用情況
服務器資源使用率
可以看到31737這個進程的CPU使用率巨大
使用top -Hp 31737查詢31737進程中各個線程的資源使用率
top -Hp 31737
使用top -Hp 31737查詢31737進程中各個線程的資源使用率
31737進程中各個線程的使用率
由于當時的截圖丟失了,簡單說一下,使用top -Hp 31737命令查詢到31737進程中,一個線程id為5322占用CPU過高
使用printf "%x\n" 5322把線程id轉(zhuǎn)化為十六進制
printf "%x\n" 5322
因為打印線程棧的時候,本地線程標識nid是用十六進制表示的,使用該命令把線程id轉(zhuǎn)化為十六進制
5322的十六進制為14ca
使用jstack命令打印堆棧信息
jstack 31737 | grep -10 14ca
使用jstack 31737 | grep -10 14ca打印31737的堆棧信息,并查找本地線程標識為14ca的線程堆棧信息
31737的堆棧信息
如圖,線程的狀態(tài)為TIMED_WAITING,對象等待中,查看源碼
出現(xiàn)問題的代碼
發(fā)現(xiàn)問題的原因就不做詳細分析了,這里主要是分享一下問題排查的過程
度娘一下有個大神回答的不錯,連接在這里,有興趣的可以自己去看一下https://stackoverflow.com/questions/6981564/why-must-the-jdbc-driver-be-put-in-tomcat-home-lib-folder/7198049#7198049
以上是“因Java應用造成CPU過高怎么排查”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!