線上java服務的CPU很高,怎么進行問題排查?


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狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM