問(wèn):現(xiàn)網(wǎng)出故障了怎么辦?
答:木有不出故障的現(xiàn)網(wǎng)卓练,遇到報(bào)障隘蝎,首先需要的是冷靜,然后有一套解決思路(包含安撫客戶)襟企,盡最快的能力修復(fù)問(wèn)題嘱么,給客戶一個(gè)能接受的合理的理由。
問(wèn):處理現(xiàn)網(wǎng)故障需把握住哪些點(diǎn)整吆?
答:態(tài)度積極友好拱撵、回復(fù)一致合理
1: 態(tài)度
在沒(méi)有定位清楚原因前,不和客戶爭(zhēng)辯/推卸責(zé)任表蝙。
非我方原因時(shí)也需要積極配合其他方定位問(wèn)題拴测。
2: 給客戶一致且合理的回復(fù)
在和客戶解釋故障原因時(shí)最好有指定的回復(fù)人,其他成員保持沉默府蛇,切記多個(gè)人和客戶說(shuō)出多個(gè)原因集索。
問(wèn):怎么解決故障?
答:定位汇跨、分析务荆、方案、修復(fù)穷遂、升級(jí)函匕。
本文著重講解定位和分析,且非功能Bug的故障蚪黑。
- 定位故障的前提
定位故障需要有兩個(gè)前提盅惜,一個(gè)是熟悉環(huán)境/業(yè)務(wù)中剩,另一個(gè)是有正常情況的峰值數(shù)據(jù)。
前提一:定位者熟悉網(wǎng)絡(luò)部署抒寂、邏輯部署结啼、業(yè)務(wù)/功能流程、應(yīng)用配置屈芜。
首先能立馬判斷出功能缺陷郊愧?還是性能問(wèn)題。
其次在定位前排查時(shí)不需要任何人的指導(dǎo)井佑,就能快速去驗(yàn)證他的猜測(cè)和所想属铁。
切記:不要找一個(gè)對(duì)以上四個(gè)方面都不熟悉的純技術(shù)牛人來(lái)主導(dǎo)定位,純技術(shù)牛人適合做協(xié)助毅糟,而不是把他放在一個(gè)陌生的環(huán)境讓他來(lái)主導(dǎo)整件事情红选。
因?yàn)樗裁匆膊皇煜だ焦斓亩ㄎ粏?wèn)題姆另,就會(huì)問(wèn)N個(gè)問(wèn)題,等他問(wèn)完一堆問(wèn)題坟乾,時(shí)間也就悄然流逝啦迹辐。
前提二:有正常情況的峰值數(shù)據(jù)。
有數(shù)據(jù)對(duì)比能立馬找到異常點(diǎn)甚侣,可省卻很多猜測(cè)后的驗(yàn)證工作明吩。
-
定位問(wèn)題第一步---確認(rèn)資源使用情況
需要資源使用資源有Cpu、Memory殷费、IO印荔、Network。
確定資源使用情況.jpg和正常情況時(shí)的峰值數(shù)據(jù)比較详羡,找出明顯升高的地方仍律。
不同類型的服務(wù)器(數(shù)據(jù)庫(kù)服務(wù)器、應(yīng)用服務(wù)器实柠、圖片服務(wù)器)水泉,各檢查一臺(tái)。
可以得到的結(jié)果:在某一類型服務(wù)器上某一資源使用率過(guò)高窒盐。 -
確定案發(fā)現(xiàn)場(chǎng)-定位異常起始點(diǎn)
3.1 以JAVA應(yīng)用為例
倘若通過(guò)資源使用情況判斷出是應(yīng)用服務(wù)器有問(wèn)題草则。
Cpu消耗高
jstack [-l ]<pid> | tee -a jstack.log
Java應(yīng)用.jpg
找自己公司程序代碼即可
Memory消耗高
顯示java進(jìn)程內(nèi)存使用的相關(guān)信息
jmap pid #打印內(nèi)存使用的摘要信息
jmap –heap pid #java heap信息
jmap -histo:live pid #統(tǒng)計(jì)對(duì)象count ,live表示在使用
jmap -histo pid >mem.txt #打印比較簡(jiǎn)單的各個(gè)有多少個(gè)對(duì)象占了多少內(nèi)存的信息蟹漓,一般重定向的文件
jmap -dump:format=b,file=mem.dat pid #將內(nèi)存使用的詳細(xì)情況輸出到mem.dat 文件
kill -3 #可以看到在catalina.out中看到新生代炕横、年輕代、老年代分配情況葡粒。
ps: jmap -dump 和jmap -histo:live消耗大份殿,會(huì)使得jvm處在假死狀態(tài)的姿锭,造成服務(wù)中斷,因此建議在服務(wù)癱瘓時(shí)使用它伯铣。
3.2 數(shù)據(jù)庫(kù)服務(wù)器的問(wèn)題
倘若通過(guò)資源使用情況判斷出是數(shù)據(jù)庫(kù)服務(wù)器有問(wèn)題呻此。
3.3 中間件的問(wèn)題
以Tomcat為例,可用probe監(jiān)控
主監(jiān)控內(nèi)存使用情況腔寡、線程使用情況焚鲜、響應(yīng)時(shí)間、請(qǐng)求量放前。
-
分析異常點(diǎn)
通過(guò)第3步的確定案發(fā)現(xiàn)場(chǎng)已找到了異常出沒(méi)的地方忿磅,接下來(lái)就是具體問(wèn)題具體分析啦。
如是JAVA程序的問(wèn)題凭语,不管是代碼本身問(wèn)題葱她,還是架構(gòu)設(shè)計(jì)上的問(wèn)題,都需要CTO帶著研發(fā)出解決方案似扔。
如是中間件的問(wèn)題吨些,Tomcat中間件可改的內(nèi)存+線程,還是解決不了問(wèn)題擴(kuò)展更多的Tomcat炒辉,升級(jí)Tomcat版本豪墅。
如是數(shù)據(jù)庫(kù)的問(wèn)題,以MySQL慢為例
數(shù)據(jù)庫(kù)慢.jpg 總結(jié)
當(dāng)接收到現(xiàn)網(wǎng)報(bào)障時(shí)黔寇,首先不要慌偶器,耐心聽(tīng)客戶描述完問(wèn)題,安撫客戶情緒(如客戶有情緒時(shí))缝裤,誠(chéng)懇跟客戶說(shuō)馬上處理-不推卸問(wèn)題屏轰,然后是真的馬上安排人處理-不拖拉問(wèn)題。
在定位問(wèn)題時(shí)憋飞,首先確認(rèn)服務(wù)器資源使用情況霎苗,定位是哪類型服務(wù)器出問(wèn)題-圈定問(wèn)題的范圍,然后去具體服務(wù)器上查異常點(diǎn)搀崭,拿到具體異常點(diǎn)后叨粘,就該找誰(shuí)找誰(shuí)啦。
如果不能定位到具體的異常點(diǎn)瘤睹,你就需要找一群人來(lái)幫忙升敲,比如:DBA、開(kāi)發(fā)轰传、網(wǎng)絡(luò)管理員驴党。先不說(shuō)找一群人來(lái)所需的時(shí)間和能不能都找到的問(wèn)題,假設(shè)都一喊到位了获茬,你需要跟他們解釋現(xiàn)象港庄,然后排任務(wù)倔既,溝通成本蹭蹭蹭就上去,同時(shí)時(shí)間也過(guò)去了鹏氧,客戶的電話說(shuō)不定也就再次過(guò)來(lái)了...渤涌。
最好的情況是你在問(wèn)題出苗頭的時(shí)候就問(wèn)題,將問(wèn)題扼殺在搖籃中把还,這個(gè)需要運(yùn)維監(jiān)控工具实蓬,現(xiàn)網(wǎng)是必須有一套的。
如沒(méi)有監(jiān)控工具吊履,那你自己就需要有一定故障定位能力安皱,確認(rèn)問(wèn)題后,你才能更快找到人來(lái)解決問(wèn)題艇炎。
總之:你自己要強(qiáng)大酌伊。