Linux進程佔用cpu100%問題排查

傳統方式

  1. 查看當前佔用CPU較大的進程PID. 命令: top
  2. 定位具體業務模塊. 命令: pwdx [PID]
  3. 定位具體項目(例如: 多個java進程) 命令: ps aux | grep [PID]
  4. 根據第一步獲取到的PID找到對應的項目,查找進程中佔用cpu較多的線程ID. 命令: top -Hp [PID]
  5. 將第二部獲取到的線程ID轉化爲16進制. 命令: printf 「0x%x\n」 [線程PID]
  6. 通過java的jstack獲取對應線程指定行數的堆棧信息. 命令: jstack [PID] | grep [線程PID] -A 50
使用示例
  1. top
    在這裏插入圖片描述
  2. pwdx 101647
    在這裏插入圖片描述
  3. ps aux | grep 101647
    在這裏插入圖片描述
  4. top -Hp 101647
    在這裏插入圖片描述
  5. printf 「0x%x\n」 101647
    在這裏插入圖片描述
  6. jstack 101647 | grep 19d45 -A 50
    在這裏插入圖片描述

優化方式

利用工具

  1. 服務檢測工具
  2. 腳本工具(例如: 阿里巴巴的show-busy-java-threads https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#-show-busy-java-threads)