架構(gòu)師說了:不想做背鍋俠?生產(chǎn)問題要這樣查
話說這天一大早,那個悲催的中年架構(gòu)師大劉又被手機微信群給炸醒。部門的運維兄弟在公司微信群里說: 短信的生產(chǎn)環(huán)境服務(wù)器 CPU 占用率過高,瘋狂報警。是不是你們昨天上線看門狗導(dǎo)致的? 大劉迷了巴登的想了想,沒錯,昨天確實給短信服務(wù)裝上了看門狗。但是看門狗服務(wù)肯定不會有問題(架構(gòu)師必備的蜜汁自信),而且上線之前各輪測試也都測過了,沒見過這個想象啊。 難道是測試妹子沒測試到位?難道線上短信應(yīng)用自身出現(xiàn)了問題? 生產(chǎn)無小事,小事更不能忽視,主要是怕扣績效獎金。大劉迅速打開電腦,打開 VPN ,遠程登上短信生產(chǎn)服務(wù)器,開始大劉最拿手的 2W1H 三板斧診斷之旅。 接下來的診斷內(nèi)容有點燒腦,節(jié)奏有點快,請大家坐穩(wěn)扶好。
1. 病號是誰(WHO)?
大劉拿出控制臺診斷儀器,輸入 top 命令一探究竟。我勒個去,不看不知道一看嚇一跳,PID 為 1878 的病號,CPU 占用居然 200% 多。 問題算是定位到了,但是 PID 為 1878 的病號到底是誰,難道真是昨天上線的看門狗 ? 雖然大劉久經(jīng)職場,但是排查生產(chǎn)問題時,內(nèi)心還是比較忐忑,畢竟這是生產(chǎn)環(huán)境。 說時遲那時快,只見大劉一個命令輸入:
ps -ef | grep 1878
定睛一看,原來是放屁瞅別人,短信服務(wù)自己在作祟,和看門狗沒關(guān)系,大劉心里一下子平緩了不少。 鍋找到了主兒,其實這個時候大劉完全可以把這個問題甩給短信開發(fā)團隊,但是大劉最喜歡做的不是甩鍋,而是打破砂鍋刨到底。
2. 病號哪里出了問題(WHERE)?
為什么 1878 號病人占用 CPU 會這么高呢? 只見黑乎乎的控制臺診斷儀器上,大劉熟練的輸入:
jstack -l 1878 1878號病歷.log
這樣便得到一份 1878 號病人的病歷詳情單,一會兒用得上。 到底 1878 號病人的哪個部位出了問題呢? 話沒說完,只見大劉又在控制臺診斷儀器上,輸入一個:
top -Hp 1878
白板黑字,把 1878 號病人的器官信息全部列了出來。 看到結(jié)果,甚是一驚,PID 代號為 8721 的器官占用 CPU 100% 多。 疑惑油然而生,這個 PID 代號 為 8721 的器官是啥,是頭、是眼睛、還是胳膊腿呢?這些器官展示的 PID 列都是昵稱,都這么善于偽裝,如何揭露它的真面目呢? 還好大劉有高招,借助照妖鏡算法,熟練的輸入:
printf "%x\n" 8721
果真使得代號為 8721 的器官,現(xiàn)了真身,真實身份居然是 2211 的呼吸道,怪不得病號一直氣喘吁吁,上氣不接下氣。 到這一步還無法對癥下藥啊,還需要進一步確診 2211 的呼吸道到底出了什么幺蛾子,導(dǎo)致 1878 號病人一直氣喘吁吁,上氣不接下氣? 只見黑乎乎的控制臺診斷儀器上,大劉再次飛一般的在輸入:
grep 2211 -A20 1878號病歷.log
診斷結(jié)果隨之顯示在診斷儀器上。 曾經(jīng)背了很多鍋的大劉,看到診斷結(jié)果心里樂了一下,一眼就看出是高并發(fā)情況下用了 HashMap 的問題(請大家們自行尋找谷歌、百度,就不在此深入展開啦),終于撥開云霧見青天。
3. 如何對癥下藥( HOW )?
在大劉行云流水沒有一絲一毫的拖泥帶水般的神操作下,1878 號病人的診斷也就結(jié)束了,這個鍋就徹底被打破了。 術(shù)業(yè)有專攻,大劉就可以鄭重的告訴短信開發(fā)同事具體原因了,捉得病根,開發(fā)同事也就可以對癥下藥啦。 大劉這套行走江湖的診斷問題方式你 get 到了沒?大劉自己簡單概括為 2W1H 三板斧:病號是誰、病號哪里出了問題、對癥下藥。 1、病號是誰?(WHO)
- 第一步:采用 top 命令,找出 CPU 占用最高的病號 PID ;
- 第二步:通過 ps -ef | grep PID 查看病號對應(yīng)的真實身份。
2、病號哪里出了問題?(WHERE)
- 第一步:采用 jstack -l PID >> PID.log 獲取病號的各器官信息的病歷單;
- 第二步:采用 top -Hp PID 拿到占用 CPU 最高的器官昵稱 PID ;
- 第三步:采用 printf "%x\n" PID 根據(jù)器官昵稱 PID 的拿到器官真實身份 TID ;
- 第四步:采用 grep TID -A20 pid.log 根據(jù) TID 去病歷單中匹配,確定是哪出了問題。
3、捉得病根、便可拿出醫(yī)藥箱,對癥下藥啦。(HOW) 作為程序猿,工作中難免會遇到不少類似這樣的問題。面對問題,你如果像無頭蒼蠅一樣亂撞,撞得頭破血流依然不知道緣由,在背鍋即將成為現(xiàn)實時,那就不妨試試大劉的 2W1H 三板斧的診斷方式,說不定會幫你快速定位、解決線上問題,畢竟快速的解決生產(chǎn)問題會把損失降到最低。 最后,想對大家說一句: 作為程序猿,一定要有程序猿的態(tài)度。避免背鍋,拒絕甩鍋,打破砂鍋,從你我做起。
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:



長按訂閱更多精彩▼

如有收獲,點個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!