如何定位消耗CPU最多的線程?
linux系統下,請按照如下步驟排查:
top -c,顯示系統運行的進程信息,輸入大寫P,進程便按照使用率排序,可以看到第一列即為進程Id,如圖中最耗CPU的進程Id為5986:
top -Hp 5986,顯示該進程的線程運行信息列表,繼續輸入大寫P使其按照CPU使用率排序,可以看到第一行,進程5986內最耗CPU的線程Id是6021:
接下來看你的應用程序是做什么的,如果是java應用程序,想獲得更多的線程相關信息,可以將上面的進程Id轉換成16進制的,因為在java堆棧里,存儲線程的Id采用的是16進制,可以直接命令“printf "%x\n" 6021”,輸出:1785:
接下來可以通過獲取到的線程id(16進制的)查看堆棧信息,查看堆棧信息的工具有很多,這里我采用jstack命令,'jstack 5986 | grep '0x1785' -C5 --color',輸出如下:
通過以上步驟,就可以知道當前系統消耗CPU最多的線程以及這個線程在做什么事情,希望能夠解決題主的問題。
少琮持續關注科技領域問答,歡迎一起討論技術,共同成長~