如何定位消耗CPU最多的線程?

龍波基尼


linux系統下,請按照如下步驟排查:

  1. top -c,顯示系統運行的進程信息,輸入大寫P,進程便按照使用率排序,可以看到第一列即為進程Id,如圖中最耗CPU的進程Id為5986:

  2. top -Hp 5986,顯示該進程的線程運行信息列表,繼續輸入大寫P使其按照CPU使用率排序,可以看到第一行,進程5986內最耗CPU的線程Id是6021:

  3. 接下來看你的應用程序是做什麼的,如果是java應用程序,想獲得更多的線程相關信息,可以將上面的進程Id轉換成16進制的,因為在java堆棧裡,存儲線程的Id採用的是16進制,可以直接命令“printf "%x\\n" 6021”,輸出:1785:

  4. 接下來可以通過獲取到的線程id(16進制的)查看堆棧信息,查看堆棧信息的工具有很多,這裡我採用jstack命令,'jstack 5986 | grep '0x1785' -C5 --color',輸出如下:

  5. 通過以上步驟,就可以知道當前系統消耗CPU最多的線程以及這個線程在做什麼事情,希望能夠解決題主的問題。

少琮持續關注科技領域問答,歡迎一起討論技術,共同成長~

java架構設計


如果是Windows的話,很簡單,右鍵任務欄,打開任務管理器。點擊CPU選項卡,即可按照CPU消耗順序查看當前操作系統運行的程序。有些程序左邊有個三角,意思就是該程序包含多個線程,展開即可看到消耗CPU最多的線程。



樂百川


如果你使用的是linux系統,可以打開shell,使用top命令,可以觀察到使用率最高的線程


分享到:


相關文章: