線上 CPU100% 排查方案

問題:生產服務器上部署了幾個java程序,忽然出現了CPU100%的異常告警,你如何定位出問題呢?html

下面給出兩種系統下的排查步驟,都是如出一轍的,只是命令稍有區別!java

  • 查消耗cpu最高的進程PID服務器

  • 根據PID查出消耗cpu最高的線程號spa

  • 根據線程號查出對應的java線程,進行處理。線程

準備一行死循環代碼:code

    public class run (){
        public static void main (String args[]){
        int count = 0;
        while (count < 1) {
            count = count * 10;
        }

    }

怎麼跑,應該不用我說了,直接教你們怎麼查!htm

Linux版

Linux版本,步驟是如出一轍的,就是命令換了一下blog

查消耗cpu最高的進程PID

執行命令排序

  • 執行top -c ,顯示進程運行信息列表。按下P,進程按照cpu使用率排序進程

以下圖所示,PID爲3033的進程耗費cpu最高

根據PID查出消耗cpu最高的線程號

執行命令

  • top -Hp 3033 ,顯示一個進程的線程運行信息列表。按下P,進程按照cpu使用率排序

以下圖所示,PID爲3034的線程耗費cpu最高

 這是十進制的數據,轉成十六進制爲0xbda

根據線程號查出對應的java線程,進行處理

執行命令,導出進程快照

jstack -l 3033 > ./3033.stack

而後執行,grep命令,看線程0xbda作了什麼

cat 3033.stack |grep 'bda' -C 8

輸出以下

 至此定位到問題

本博文來源於:http://www.javashuo.com/article/p-brquoafh-cn.html

相關文章
相關標籤/搜索