天天看點

記錄一次線上問題排查結論事故描述排查過程

結論

本次事故沒有找到原因,僅記錄排查過程。(是以先出結論)

事故描述

線上N台伺服器,啥也沒動,其中一台突然報警,大量接口逾時。

排查過程

  1. 日常操作,第一個先把nginx停了,停止對外服務~ 剩下的慢慢看。
  2. top指令檢視程序情況。發現java程序記憶體使用正常,CPU使用率暴增,浮動區間200%~600%(8核)。
  3. $ jstat -gcutile <pid> 1000 100 列印java程序的GC情況,發現YGCT是其他正常機器的3倍。
  4. $ top -Hp <pid> 檢視java程序的線程使用情況,找了CPU占用率最高的幾個,記錄它們的id。
  5. $ printf “%x\n” 轉成十六進制,記錄。
  6. $ jstack <pid> > jstack.log 列印程序堆棧資訊,查找剛才記錄的幾個所在的線程,CPU占用率最高的是GC線程,不管。有一個BLOCKED狀态的線程,是MQClient,其中報錯為MySQL連接配接失敗,但是檢查了MySQL配置,可以ping通,懷疑CPU過高導緻TCP連接配接逾時。另外占用高的有NettyClientWorkerThread,MQ-AsyncArrayDispatcher-Thread等等。
  7. jstack網站
  8. jmap -dump:live,format=b,file=heap.hprof <pid> dump了兩次,到JProfile中比較檢視是否有異常的大對象,無發現。
  9. 提了工單問阿裡雲的售後,說我提供的時間段裡,同台實體機的其他ECS沒有CPU驟增的情況,都很平穩。
  10. 問題排查到淩晨2點,期間重發應用3次,CPU照飙,2點半抱着僥幸心理又重發了一次,CPU使用率穩定在30%一下,沒有改代碼,沒有改配置,觀察了半個小時穩定,回家睡覺,第二天起床再看,CPU穩定,啟動Nginx,一切恢複正常。
  11. 撒情況???