1、命令:top
說明:輸入大寫P,對占用cpu的進程進行排序,查看哪個進程占用的cpu最高,找到占用cpu最高的進程pid。
2、命令:jps
說明:查看占用cpu最高的進程對應的哪個服務
3、命令:top -Hp pid
說明:找到這個進程中占用cpu最高的線程
4、命令:printf %x tid
說明:將線程id轉換成16進制,前面再加上0x
5、命令:jstack pid<開始的進程id> | grep 0xtid<0x加上上一步轉換出來的線程id>
說明:打印出這個線程的信息,有線程的名稱,線程id(tid),操作系統對應的線程id(nid)
總結:
對於jstack日志,我們要着重關注如下關鍵信息
Deadlock:表示有死鎖
Waiting on condition:等待某個資源或條件發生來喚醒自己。具體需要結合jstacktrace來分析,比如線程正在sleep,網絡讀寫繁忙而等待
Blocked:阻塞
Waiting on monitor entry:在等待獲取鎖
如果說系統慢,那么要特別關注Blocked,Waiting on condition
如果說系統的cpu耗的高,那么肯定是線程執行有死循環,那么此時要關注下Runable狀態。