天天看點

xx=page++差點導緻線上事故

背景

部門提供了一個對外接口給組外同僚使用,今天早上活動大促通過監控發現,該接口請求量大增,3小時60幾萬次,非常恐怖,而db又都是平峰,通過調用鍊發現該redis 一次指派80多萬次非常恐怖,明顯一年發現應該是代碼問題,通過詢問得知的确發了版本,但是隻是加了try cath,通過監控顯示

xx=page++差點導緻線上事故

es一個方法調了将近90萬次

xx=page++差點導緻線上事故

接口一小時調用量

xx=page++差點導緻線上事故

監控圖

xx=page++差點導緻線上事故

未找到相關異常

xx=page++差點導緻線上事故

檢視是否新的第三方調用發現隻有一個使用方

xx=page++差點導緻線上事故

檢視每分鐘調用次數,吓了一跳一分鐘 38380次...

xx=page++差點導緻線上事故

CPU上升了

xx=page++差點導緻線上事故

後面通過負責發過來的代碼檢視得知..

@Override
    public void updateItemServiceGroupInfo() {
        int pageIndex = 0;
        while (true) {
            pageIndex = pageIndex++;
            try {
               xxx
                } else {
                    break;
                }
            } catch (Exception e) {
                logger.error("目前頁數:{}", pageIndex, e);
                break;
            }
        }
    }

           

複制

pageIndex = pageIndex++; 導緻死循環

pageIndex = ++pageIndex; 正常

比如:pageIndex=1;

pageIndex = pageIndex++ ; 結果為1

pageIndex = ++pageIndex; 結果為2

該問題差點引起了線上事故....還好通過監控及時發現...切記切記切記(重要的事情說三遍)

修複好的監控圖:

xx=page++差點導緻線上事故

CPU

xx=page++差點導緻線上事故

最後

通過該問題發現,出現該問題差點引發嚴重後果,無非就兩種情況,要麼編碼未注意到,要麼是自測不到位,導緻嚴重的後果,是以工作與生活都一樣,處處需要用心。該案例僅供參考,謝謝!