問題分類
☆ known-known
就是你想要知道且已經(jīng)獲取到的一些信息。比如日志業(yè)務(wù)表現(xiàn)、監(jiān)控圖上反映出來的信息。一般來說,比較容易獲取的信息大概有以下這些。
?服務(wù)表現(xiàn):?jiǎn)栴}的具體表現(xiàn)(出錯(cuò)、超時(shí)等)、應(yīng)用日志、依賴服務(wù)的狀態(tài)等。
?系統(tǒng)狀態(tài):操作系統(tǒng)指標(biāo)(系統(tǒng)管理的各種資源的狀態(tài)、系統(tǒng)日志等)、VM指標(biāo)(主要是GC)。
?硬件指標(biāo):CPU、內(nèi)存、網(wǎng)絡(luò)、硬盤是否達(dá)到瓶頸。
總結(jié)一下關(guān)于known-known類的線索:主要是在不丟失信息的情況下,對(duì)信息做定量和歸類分析,定位進(jìn)一步的排查方向。
☆?known-unknown
是指你想要知道但目前還不知道的信息,一般指不能直接看到的信息。可能你會(huì)疑惑為什么會(huì)有這個(gè)分類,它跟上面有什么區(qū)別。
如何獲取這些隱藏的信息,我個(gè)人的經(jīng)驗(yàn)是使用工具,不管是系統(tǒng)還是應(yīng)用都可以給我們提供很多工具,在QCon的演講里也提到了一些。無論是系統(tǒng)提供的,還是第三方的,或是自己開發(fā)的都可以輔助我們發(fā)現(xiàn)更多的線索。
關(guān)于known-unknown只強(qiáng)調(diào)一點(diǎn):如果要做用于排查問題的工具,若一次查詢的時(shí)間超過3分鐘,那在實(shí)際排查的過程中很有可能無法發(fā)揮此工具的價(jià)值。
☆?unkonwn-unknown
在高負(fù)載系統(tǒng)出現(xiàn)的問題中,有很大一部分問題的產(chǎn)生原因是原先根本不了解的,比如JVM里的某個(gè)Bug,或者某些內(nèi)核在實(shí)現(xiàn)中有一些之前聽都沒聽過的特殊機(jī)制。這個(gè)時(shí)候其實(shí)就沒有很具體的方法了,不過還是說一些思路跟大家分享一下:對(duì)于這類場(chǎng)景可以做減法,盡可能縮小范圍,當(dāng)范圍可控之后,再去了解相應(yīng)的原理。
總結(jié)
??在排查的時(shí)候大家可能會(huì)交替地遇到這幾種場(chǎng)景,不過只要掌握訣竅,逐個(gè)擊破就好。
本文節(jié)選自《高可用架構(gòu)(第1卷)》