在前兩天突然間接到反饋說伺服器很卡解決後來做乙個記錄.
以下為檢查stack與heap的部分截圖
雖然說老年代已經77%, 但是看起來還是正常的, 並沒有到要爆掉的情況
但是觀察了幾分鐘後cpu一直持續占用不下
網上查了一些api後偶然間看到"top -h -p"可以檢視某程序下的所有執行緒
執行後可以看到, 其中8個活躍執行緒都接近100%佔用率了
有執行緒就好說了, 通過api知道左邊的pid是隸屬程序下解釋為10進製的執行緒id
然後結合程序的stack資訊內的一些資訊如圖所示 nid=執行緒id位址(包含0x開頭的必然是16進製制)
隨便查乙個pid上面如13063解釋為16進製為0x3307在匯出的stack資訊內進行搜尋
結果如上圖,接下來就是去擼**了,然後看到程式是乙個特殊觸發的邏輯,會進行死迴圈,導致執行緒遲遲不釋放這樣使用者量一上來就會導致伺服器癱瘓了,但是好在是特殊邏輯,沒有同時出現,修改後提交之後再次檢視伺服器狀態一切正常了.
為了方便你也成功解決問題, 文中提到的命令:
1\"jstack pid" 為程序stack命令
2\"jmap -heap pid" 為程序heap命令
3\"jstack -f pid" 檢視stack資訊, 該命令會掛起程序
4\"jmap -dump:format=b,file=heapdump.bin " 進行heap快照, 該命令執行期間也會掛起程序
排查Java高CPU占用原因
top命令發現某個程序占用了100 的cpu 通過ps命令,進一步確定哪個程序出了問題 再檢視執行緒占用cpu的列表 找到占用cpu最高的執行緒,檢視tid,將其轉換為16進製制格式 printf x n tid 而後檢視堆疊資訊 jstack pid grep 16進製制tid a 60這裡報錯是...
Linux下java程序占用CPU 100 排查
網上已經有老哥分享了。原文 主要是做個記錄備查 幾個命令 1.top檢視程序pid pid 37654 2.top p 37654 shift h 檢視子執行緒的pid 559 3.printf x n 559 轉成16進製制 0x22f,使用jstack的時候使用 4.jstack 37654 g...
Linux下如何檢視高CPU佔用率執行緒
在 linux 下 top 工具可以顯示 cpu 的平均利用率 user,nice,system,idle,iowait,irq,softirq,etc.可以顯示每個 cpu 的利用率。但是無法顯示每個執行緒的 cpu 利用率情況,這時就可能出現這種情況,總的 cpu 利用率中 user 或 sys...