线上问题排查流程
問題排查
- 針對各種常見的線上問題,梳理下排查思路。
業務問題
- 線上問題大多數時候都是業務問題引發的問題,當線上環境絕大多數請求都是正常,當有部分或者某一個用戶有問題,此時怎么針對性的排查
- 在當前微服務體系下,一般都會有分布式鏈路追蹤系統 ,以及ELK日志系統,我們完全可以通過監控平臺去找到問題的點:
- 異常日志的抓取
- 此時我們可以通過日志追蹤得到當前用戶的請求信息:
- 利用Arths的watch命令監控對應異常接口,通過日志得到對應的參數,通過Dubbo的invoke 命令模擬線上用戶的請求,從而復現問題,解決問題
非業務問題
- Arthas工具是一個很好的在線定位問題的工具,安裝簡單
- 在非業務問題上的排查流程,必然先檢查CPU, 內存, 線程等計算機核心資源
- 我們通過dashboard命令可以得到本服務中對應的信息,并且每隔幾秒會獲取最新數據。
- 可以在線程監控區域看到:線程id, 名稱,狀態,CPU占用情況,是否守護線程等
- 內存嘻嘻:堆內存,Eden區,Survivor區,老年代,方法區
- 機器情況
-
如上我們可以得到對應的線程信息關鍵的線程id
-
接著可以通過Thread thread_id 查詢某個線程的執行堆棧,甚至都不用dump
-
還有反編譯jad,在線查詢對應類的源碼信息,方便問題排查
-
但是大多線上事故都不會有時間去臨時查找,對應生成系統,能在線定位時間不多,
-
我會按如下步驟進行:
- 按順序重啟有問題的機器,看是否能解決問題,
- 在此同時,在最后重啟的哪臺機器上先執行jmap -dump指令將java堆的線程情況保存下來
- 機器重啟后如果不能恢復,會回退到之前版本,保證線上業務正常
- 將保存下的dump文件導入到本地
- 用jdk自帶的 java visualVM工具將dump文件導入
- visualVM可以通過可視化界面查看 dump 文件中記錄所使用的類,每個類中對象以及各種當前環境下具體內容線下分析具體原因后在去解決。
總結
- 上一篇: elasticSearch -- (文档
- 下一篇: 数据结构与算法一篇帮助你吃下KMP算法