線(xiàn)上服務(wù)器cpu 100%了,該如何排查問(wèn)題?

cpu使用率是如何統(tǒng)計(jì)出來(lái)的?

這里的cpu使用率與linux 命令top-H-p<pid> 的線(xiàn)程%CPU類(lèi)似,一段采樣間隔時(shí)間內(nèi),當(dāng)前JVM里各個(gè)線(xiàn)程的增量cpu時(shí)間與采樣間隔時(shí)間的比例。

工作原理說(shuō)明:

  • 首先第一次采樣,獲取所有線(xiàn)程的CPU時(shí)間(調(diào)用的是java.lang.management.ThreadMXBean#getThreadCpuTime()及sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()接口)
  • 然后睡眠等待一個(gè)間隔時(shí)間(默認(rèn)為200ms,可以通過(guò)-i指定間隔時(shí)間)
  • 再次第二次采樣,獲取所有線(xiàn)程的CPU時(shí)間,對(duì)比兩次采樣數(shù)據(jù),計(jì)算出每個(gè)線(xiàn)程的增量CPU時(shí)間
  • 線(xiàn)程CPU使用率 = 線(xiàn)程增量CPU時(shí)間 / 采樣間隔時(shí)間 * 100%

注意: 這個(gè)統(tǒng)計(jì)也會(huì)產(chǎn)生一定的開(kāi)銷(xiāo)(JDK這個(gè)接口本身開(kāi)銷(xiāo)比較大),因此會(huì)看到as的線(xiàn)程占用一定的百分比,為了降低統(tǒng)計(jì)自身的開(kāi)銷(xiāo)帶來(lái)的影響,可以把采樣間隔拉長(zhǎng)一些,比如5000毫秒。

使用參考

當(dāng)前最忙的前N個(gè)線(xiàn)程并打印堆棧:

image
image
  • 沒(méi)有線(xiàn)程ID,包含[Internal]表示為JVM內(nèi)部線(xiàn)程,參考dashboard命令的介紹。
  • cpuUsage為采樣間隔時(shí)間內(nèi)線(xiàn)程的CPU使用率,與dashboard命令的數(shù)據(jù)一致。
  • deltaTime為采樣間隔時(shí)間內(nèi)線(xiàn)程的增量CPU時(shí)間,小于1ms時(shí)被取整顯示為0ms。
  • time 線(xiàn)程運(yùn)行總CPU時(shí)間。

注意:線(xiàn)程棧為第二采樣結(jié)束時(shí)獲取,不能表明采樣間隔時(shí)間內(nèi)該線(xiàn)程都是在處理相同的任務(wù)。建議間隔時(shí)間不要太長(zhǎng),可能間隔時(shí)間越大越不準(zhǔn)確。 可以根據(jù)具體情況嘗試指定不同的間隔時(shí)間,觀(guān)察輸出結(jié)果。

image

當(dāng)沒(méi)有參數(shù)時(shí),顯示第一頁(yè)線(xiàn)程的信息

默認(rèn)按照CPU增量時(shí)間降序排列,只顯示第一頁(yè)數(shù)據(jù)。

image
  • thread –all, 顯示所有匹配的線(xiàn)程

顯示所有匹配線(xiàn)程信息,有時(shí)需要獲取全部JVM的線(xiàn)程數(shù)據(jù)進(jìn)行分析。

  • thread id, 顯示指定線(xiàn)程的運(yùn)行堆棧
image
  • thread -b, 找出當(dāng)前阻塞其他線(xiàn)程的線(xiàn)程

有時(shí)候我們發(fā)現(xiàn)應(yīng)用卡住了, 通常是由于某個(gè)線(xiàn)程拿住了某個(gè)鎖, 并且其他線(xiàn)程都在等待這把鎖造成的。 為了排查這類(lèi)問(wèn)題, arthas提供了thread-b, 一鍵找出那個(gè)罪魁禍?zhǔn)住?br> 注意, 目前只支持找出synchronized關(guān)鍵字阻塞住的線(xiàn)程, 如果是java.util.concurrent.Lock, 目前還不支持。目前使用效果不佳

  • thread -i, 指定采樣時(shí)間間隔
    • thread-i1000 : 統(tǒng)計(jì)最近1000ms內(nèi)的線(xiàn)程CPU時(shí)間。
    • thread-n3-i1000 : 列出1000ms內(nèi)最忙的3個(gè)線(xiàn)程棧
image
  • thread –state ,查看指定狀態(tài)的線(xiàn)程
image

作者 | 智哥

原文鏈接

本文為碼農(nóng)架構(gòu)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容