背景
部門提供了一個對外接口給組外同僚使用,今天早上活動大促通過監控發現,該接口請求量大增,3小時60幾萬次,非常恐怖,而db又都是平峰,通過調用鍊發現該redis 一次指派80多萬次非常恐怖,明顯一年發現應該是代碼問題,通過詢問得知的确發了版本,但是隻是加了try cath,通過監控顯示
es一個方法調了将近90萬次
接口一小時調用量
監控圖
未找到相關異常
檢視是否新的第三方調用發現隻有一個使用方
檢視每分鐘調用次數,吓了一跳一分鐘 38380次...
CPU上升了
後面通過負責發過來的代碼檢視得知..
@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
該問題差點引起了線上事故....還好通過監控及時發現...切記切記切記(重要的事情說三遍)
修複好的監控圖:
CPU
最後
通過該問題發現,出現該問題差點引發嚴重後果,無非就兩種情況,要麼編碼未注意到,要麼是自測不到位,導緻嚴重的後果,是以工作與生活都一樣,處處需要用心。該案例僅供參考,謝謝!