線上問(wèn)題處理步驟:發(fā)現(xiàn)問(wèn)題->快速恢復(fù)->定位與修復(fù)->方法論-為故障和失敗做設(shè)計(jì)
需關(guān)注的系統(tǒng)參數(shù):
應(yīng)用層:接口響應(yīng)時(shí)間,qps,并發(fā)數(shù)
軟件層:jvm,DB,緩存
系統(tǒng)層:CPU,內(nèi)存,IO
1.發(fā)現(xiàn)問(wèn)題:人肉主動(dòng)發(fā)現(xiàn)->生產(chǎn)事件上報(bào)->關(guān)聯(lián)系統(tǒng)故障追溯->業(yè)務(wù)監(jiān)控報(bào)警->系統(tǒng)監(jiān)控報(bào)警
2.快速恢復(fù):驗(yàn)證->排查解決->恢復(fù)服務(wù)->保留現(xiàn)場(chǎng)
3.定位與修復(fù):
常規(guī)操作:重啟,回滾,降級(jí),摘機(jī)


特殊場(chǎng)景:無(wú)法定位故障
原則:確保線上服務(wù)快速恢復(fù),不能完全恢復(fù)的情況下,確保線上服務(wù)盡可能少的受到影響
手段:
1)服務(wù)降級(jí):定位到服務(wù)異常,但不清楚異常原因,直接降級(jí)該服務(wù),確保其他服務(wù)不受影響
2)服務(wù)緊急擴(kuò)容:服務(wù)器資源飆升但無(wú)法定位到問(wèn)題時(shí),緊急擴(kuò)容服務(wù)器(可能為惡意攻擊,促銷活動(dòng),秒殺等情況)
3)回退版本:有新版本發(fā)布,但是不能確定故障是否和新版本有關(guān)系,先回退到上一個(gè)穩(wěn)定版本
保留現(xiàn)場(chǎng)
1)執(zhí)行top命令,觀察Cpus-ids(CPU的空閑程度),值過(guò)低時(shí),shift+P按使用率倒排,記錄最耗資源的進(jìn)程信息
2)執(zhí)行free -m命令,觀察cache行free列的值,值過(guò)低是,執(zhí)行top命令,shift+m按內(nèi)存使用量倒排,記錄最耗資源的進(jìn)程信息
3)對(duì)耗資源進(jìn)程執(zhí)行ps xuf| grep pid命令,打印進(jìn)程具體信息并記錄
4)執(zhí)行jstack pid打印日志,取多組方便比較
5)執(zhí)行jstat -gcutil查看Old區(qū)占用率,若達(dá)到或接近100%,則執(zhí)行jmap -histo pid
常見(jiàn)故障原因


問(wèn)題排查常用命令:
CPU:top -Hp
內(nèi)存:free -m
IO: iostat
磁盤(pán):df -h
網(wǎng)絡(luò)連接:netstat
GC:jstat -gcutil(建議重點(diǎn)了解)
線程:jstack
內(nèi)存:jmap
輔助工具:MAT,btrace,jprofile
4.方法論
系統(tǒng)資源的異常現(xiàn)象:cpu飆高&內(nèi)存不足&磁盤(pán)IO高&網(wǎng)絡(luò)連接高
服務(wù)內(nèi)部的異?,F(xiàn)象:OOM&異常日志&疑難雜癥(死鎖、死循環(huán)、等待外部響應(yīng))

5.為故障和失敗做設(shè)計(jì)
1)故障發(fā)生時(shí)盡可能維持系統(tǒng)核心功能的可用性
2)依賴模型&依賴治理
3)超時(shí)機(jī)制(系統(tǒng)超時(shí)、網(wǎng)絡(luò)超時(shí)、Fail fast)
4) 回退機(jī)制
5)熔斷器