解決問題方法論,技術人都應該學習的troubleshooting

2021-12-09 InfoQ 架構頭條
本文源自5月23日『高效開發運維』微信群的在線分享,轉載請在文章開頭註明來自『高效開發運維』公眾號。加群學習請關注『高效開發運維』公眾號,並點擊菜單中的「加群學習」或直接回復「加群」。

troubleshooting 是找到問題發生的根源並將其解決更正的過程,troubleshooting 的目標就是使設備 / 系統回到正常的工作狀態。

因為很多系統,特別是 IT 系統或者一些電力系統、通訊系統,都是 7×24 小時不間斷運行的。如果一旦發生故障,就要求我們運維人員很快的發現故障,然後用快速和經濟的辦法去把這個故障解決掉。比如醫院有些支撐手術的系統,一旦故障如果不能很快解決的話,甚至會威脅到病人的生命安全。所以 troubleshooting 對我們運維人員來說是一項非常重要的技能和技術要求。

不僅在工作中需要做 troubleshooting,生活中也會遇到。前段時間我跟著朋友在玩王者榮耀,就遇到了一個故障。每天晚上玩這個遊戲大概 8、9 點鐘就遇到打著打著網絡質量變差,操作變得很卡。我很苦惱,作為一個運維人員,或者一個技術人員的本能,我就想網絡是什麼問題?怎麼把它解決掉?所以我就做了一次 troubleshooting 的過程。我對家裡所有的無線網絡,聯通的寬帶做了一些測試,嘗試對無線路由器做了配置優化,最後定位到是我們家和鄰居附近 2.4G 信道太擁擠了,幹擾太嚴重,所以晚高峰的時候大家都有上網需求,會互相干擾。後來我把信道切換到 5G,世界就清靜了,可以安心打遊戲了。

後來我就思考,有沒有非常科學和規範的流程或方法,按照這個方法一步步做下來,就可以解決任何故障或問題?儘管問題多種多樣,實際問題解決的方式也是多種多樣,對於具體場景和問題,可以制定特定的問題解決流程。在具體的工作中,大家有做 SA 的,也有做網絡的,也有做 DBA 的,每一個特定的方向都會有一些跟專業和問題場景相關的 troubleshooting 方法。

對於通用的問題,是否會有通用的解決方法和解決步驟可以遵循呢?

這是 《troubleshooting and maintaining cisco IP network》 這本書的作者總結的一套相對一個通用的方法。他把 troubleshooting 整個過程分成了 7 個步驟,從定義問題,到收集線索和信息,到分析、假設、排除可能性,最終可以把問題解決掉。

在一些複雜的系統或複雜問題的 troubleshooting 中,我們可以按照這個解決方法的流程對問題去做一些抽象和定義,然後一步一步來解決。

在這個標準流程和方法之外,我們可能會遇到一些相對簡單或者更直觀的問題,可以使用一些具體的策略和小技巧來更快速的 troubleshooting。

我們經常會遇到電視按了開關怎麼沒反應?電腦怎麼開不了了?這個問題有非常大的可能性是電源沒插,或者停電了。從這個事情引申出來,任何系統運行都需要一些必要的前提條件,或者叫先決條件。在系統或服務發生異常的時候,需要回過頭來了解一下這個系統有哪些依賴關係,有哪些先決的條件,這些條件是不是之前是存在和正常的,現在條件不滿足了,所以發生了一些故障。

比如說摩託車在行駛過程中不走了,是不是沒油了?在一些非常成熟或者產品化做得非常好的產品,比如說 iphone 手機,它的用戶手冊裡會列出正常運行的條件,以及要遠離哪些條件,比如高溫、低溫等,會做一個非常明確的定義。

但是在一些自研系統的運維過程中,這些系統往往文檔和說明並不是特別完善,所以先決條件需要根據系統的異常或者問題去做一些排查,另外也需要跟研發人員,或者是設計人員做一些深入的溝通,找到系統的一些先決條件,然後作為一個排查的線索去進行排查。這是第一個很基本的 troubleshooting 方法。每一個人都解決過類似的問題,大多數的問題往往是很普通的原因造成的,而我們的經驗和直覺可以幫助解決。

我們進入下一個問題解決的策略,大家都有裝過電腦的經驗嗎?一套計算機系統有很多部件,比如 CPU、內存、電源、機箱、顯示器、光碟機、滑鼠、音響、網卡,等等。我們在裝機的時候並不是需要一次性全部裝好,往往是把電源,主板、CPU、內存裝好後,就可以試試這套系統能不能正常工作。如果這個系統能亮,說明這套系統最重要的部件是 OK 的。所以從 troubleshooting 的角度,在做故障定位的時候,可以嘗試把一個非常複雜,功能和組件非常多的系統,精簡到最基本的系統,測試沒問題後,再一件一件把其他的系統組件加進來,這樣就可以事半功倍的把這個問題找到並解決掉。

另外一個跟第一種場景類似,系統經過長時間的運行,工作狀態不正常了,一般怎麼解決呢?重啟一下。在我之前的前東家有一條不成文的規則,重要的系統在節假日前做排查,如果超過多少天沒有重啟,就會安排一次計劃中的重啟,來避免系統長時間的運行導致的異常的狀態。

所以可以用一些重啟的方案來把故障恢復到系統初始的狀態,把這個故障解決掉,這是一個非常強有力的一個故障解決方法。當然,重啟前需要考慮預期外的後果,比如可能啟動失敗會導致更差的後果。除了重啟,還可以重裝 / 重建系統,從默認或正常工作的系統複製一個副本出來。

當我們通過一些分析定位發現,故障可能發生在某個子系統或者某幾個模塊之內,有什麼辦法能夠很快的定位問題呢?可以嘗試去更換其中一個部件,然後測試下。使用這個方法,可以通過排查一步一步精確定位到故障點,然後去解決。這為我們以後遇到類似的問題提供了寶貴的經驗。在使用這個方法的過程中,需要注意,每次只更換一個組件,測試完成後如果需要更換其他部件,首先要講之前更改的恢復原狀。否則可能會因為變更導致出現多個問題,影響和幹擾問題的解決。

troubleshooting 既是一門科學,也是藝術。除此之外,還可以嘗試復現問題、更改啟動和配置順序等等方法,在實踐中根據時間、資源、場景情況和限制,選擇最適合的策略,完成 troubleshooting。Happy troubleshooting!

作者介紹

滕傳永,美團雲架構師。先後在百度和 eBay 從事系統和服務運維工作,工作涉及基礎服務運維,大規模系統部署和優化,虛擬化等。12 年加入美團,負責運維工作,主要集中在基礎服務運維,數據中心和網絡建設,雲計算環境建設和運維等方面。

相關焦點

  • Troubleshooting是個什麼過程?
    文字的潮流還真是有些讓人捉摸不定。像troubleshooting這個詞,十幾年前在技術類的稿子裡頻頻遇到,近年來卻少見了。最近又遇到一次,還有點親切。它的詞義倒也不難把握,詞典上有現成的定義。這個解釋告訴我們troubleshooting是個解決重大問題的過程,把場景說成是企業或政府中。
  • troubleshooting--回溯+debug
    上次提到troubleshooting ability框定了troubleshooting的框架,這次再講一個解決複雜問題的技巧--回溯+debug
  • 王成輝:用XEvent做高級Troubleshooting
    ,雲集了國內技術水平最高的數據架構師、DBA、資料庫開發工程師、研發總監、IT經理等,是目前國內最受歡迎的資料庫技術盛會。  本次演講主要介紹SQLServer擴展事件(Extended Events,簡稱XEvent),理解擴展事件架構,使用擴展事件對SQLServer進行Troubleshooting。擴展事件顯著地減少診斷和解決問題的時間。擴展事件可深度地揭示SQLServer的內幕。
  • 質量人必懂:創新問題的解決方法論TRIZ
    前言TRIZ是前蘇聯科學家阿奇舒勒通過對20多萬份高價值專利的研究,探索技巧,所得出的一套解決發明創新問題的方法論,是基於知識的、面向人的解決發明問題的系統化方法學。物理矛盾所存在的子系統就是系統的關鍵子系統,系統或關鍵子系統應該具有為滿足某個需求的參數特性,但另一個需求要求系統或關鍵子系統又不能具有這樣的參數特性。分離原理是阿奇舒勒針對物理矛盾的解決而提出的,分離方法共有11種,歸納概括為四大分離原理,分別是空間分離、時間分離、條件分離和整體與部分的分離。
  • trouble shared is trouble halved 原來 trouble 是可分的
    我始終相信一個性格內向的人,比如說我,遇到一個問題都比較糾結,而且都是自己一個人承受,除非是別人主動幫你,否則這個問題就很難得到很好的解決,容易有後遺症,但實際上從 trouble shared is trouble halved 這個習語上看,trouble 是可分的,這取決於遇到問題的人處理問題的方式,它可以意為「兩人分擔,困難減半」等,寓意:
  • 技術方案設計沒有深度?試試這套方法論
    曾經我的老師給我講一個觀點,把手掌放在眼前,你只能看到這個手掌,如果把手掌放在遠處,你的視野就更廣了,因此視野更關鍵,不要只關注事情的本身,可以跳出來看看,或者你能想到的更多。就事論事只是一個表象,它背後還是深層次的原因,個人覺得是缺乏體系化地思考問題,"只見樹木、不見森林",沒有從不同的維度上去思考問題,只是線性地思考,它直接的表現就是就事論事,只把手頭上的事情完成即可。
  • 滴滴曹樂:如何成為技術大牛?
    在這樣一個行業裡,如果一個人能夠持續成長,能力和工作年限成正比的持續提升,這樣的人,任何時候在行業裡都是被瘋搶,怎麼可能會遇到任何年齡的危機呢?如何學習,其實是有方法論的,那就是刻意練習。所謂的10000小時成為大牛的理論是片面的,如果只是簡單重複10000小時,是不可能成為大牛的。刻意練習包含了三個步驟。
  • 《麥肯錫方法》|精英高效方法論,解決複雜問題的「葵花寶典」
    這種算不算一種高效的聽書方法,其實無論是《麥肯錫的精英思考習慣》《麥肯錫的精英談判策略》還是《麥肯錫教我的寫作武器》這些都是非常高效,有質量地提供高效解決方法的閱讀書籍。我們有沒有發現一個問題,就是麥肯錫無論它有多少成功的案例,其實都是方法論。一套行之有效邏輯方法。
  • 淺述學習方法論-隨意刀
    註:順便建議@梁說高考 先生,對外介紹也可以用學習方法論這個名詞來概括自己的教育體系。名為學習方法論,實為一整套龐雜體系。我大略分為三個主要板塊。1,父母與學生的家庭關係這一板塊是為了梳理家庭關係使之成為助力而不是阻力,也是為了把握學生思維緣起及推斷走向,因為未成年的問題都是家庭的問題,只有將這一塊分析透徹,才能針對性對學生進行靈魂上的引導,真正觸及心靈,引出本源的動力。因為絕大部分人與人智商並無本質差別,差別只在悟性上,而我方法論的本質,實際上教的就是悟性。
  • 寧德核電公司第二屆Trouble Shooting技能大賽圓滿落幕
    為求競賽戰隊的全面性和多樣性,參加本次競賽的六大戰隊均採用公司內部跨專業聯合組隊方式,每支隊伍5名隊員包含了2名維修人員,1名系統人員,1名運行人員,1名技術支持人員。競賽試題包括設備故障診斷、電廠過往經驗反饋和Trouble Shooting方法論等,選手們充分運用各自的故障排除理論知識,輔以豐富的工作經驗,在各自擅長的領域積極作答。在場上戰隊你爭我奪、激烈角逐的同時,主持人還通過趣味問題作答和掃碼抽獎的方式與場內觀眾互動,送出精美的禮品,使得整個比賽過程張弛有度,臺上臺下全場氣氛活躍。
  • 隨意刀學習方法論-3-部分原則淺述
    方法論直指靈性剛才看到某篇文章稱只要將基礎和中等難度的題都做到應該就能達到600分,其下一個評論說,我們考了464分,你說的容易,但是會者不難,難者不會,我們就是做不到。我所擅長的方法論,就屬於第三種。尤其是我自己高中階段可是學渣,具體知識技巧上我基本教不了孩子,連數學題我都不會做,所以我的方法論,99.9%屬於哲學的點化悟性範疇。也就是說,我是將孩子教成「會者」,然後學習自然不難。
  • 超級全的氣相色譜Troubleshooting(上)!這些經驗讓你躋身高手!
    實驗室的小夥伴們是否經常因為你的氣相色譜儀出現各種問題而苦惱,基線異常
  • 隨意刀學習方法論7--隨筆
    這位雲鶴凌空老師所言案例,翻譯成我的方法論表述就是解決生死觀問題,不過他是偶爾為之,我則是提升到戰略高度,要求所有孩子,塑造天賦第一步,就是解決生死觀問題。善哉,以我來表述,這就是生死觀問題的一部分,99.9%的人與人之間智力並無絕對差別。
  • 解決好過河的「橋」和「船」問題 始終堅持正確的改革方法論
    解決好過河的「橋」和「船」問題 始終堅持正確的改革方法論 2019「橋」和「船」問題  始終堅持正確的改革方法論(適勢求是)  改革開放是異常複雜的社會系統工程,必須始終堅持正確的方法論。
  • 小學生「打架方法論」火了,打架雖不可取,但方法論值得學習
    在網上,一個小學生寫的《打架方法論》作文火了,這個小同學以讓人耳目一新的方式重新定位了打架是個技術活。首先要選對打架的選手,那種自己打不過的、人緣好的和實力太差的都不要選;其次是打架的時間,上課和課間都不是好的選擇,最好的就是放學的時候;最後也就是最重要的就是打人的力道控制最重要,如果控制不好乾脆就不要打架了。
  • 隨意刀學習方法論5-評論摘錄
    在黑馬教育梁老師的文章評論區裡關於「82年的菜籽油」評論的點評:這位不相信梁老師和我所講的學習方法論,認為梁老師該文中提及的某個底子很差的差生,是不可能被梁老師在一年內改造成功的。這其實倒很正常,大多數人都難以相信。正如大多數補習班:普通的無非就是把學生監督好,把課再講幾遍,拿出更多的題要求刷題。
  • 為什麼軟體開發方法論讓你覺得糟糕? - OSCHINA - 中文開源技術...
    或許這是個經濟學裡一個被廣泛接受的觀點的引申,但如果人是可以輕易輪換的(隨便找個人都能頂上),那才是堪稱理想的。   問題是,我們怎樣才能找到有(合適)技能的開發者?IT界從未很好地定義個體生產率,從這點來看,那麼,要找到合適技能的開發者就是個很難解決的問題。
  • 2019中考奧運會英語詞彙:Shooting 射擊
    也有團體項目,使用槍枝射擊的人叫射手(射擊運動員)或叫神槍手。射擊運動員的技術叫射擊術。最初槍枝用於狩獵和軍事目的。現在,射擊被當作是一種娛樂活動。射擊首次列入現代奧運會在1896年雅典奧運會。1897年舉行了首屆世界射擊錦標賽。1907年世界射擊聯盟成立。
  • 我們應該學習計算機技術,而且我們更應該學習計算機編程
    計算機編程,也稱為計算機軟體開發技術,是當今最熱門的專業,而從事軟體開發的開發者也是最高薪的職業之一,所以很多的學生想學習計算機編程技術,但是又擔心自己的數學和英語基礎不好,學不好這項技術。那麼今天我們將針對計算機編程技術適合什麼樣的人學,計算機編程技術需要有什麼樣的基礎的問題來進行分析。
  • 「spell trouble」可不是指「拼寫問題」!
    大家好,今天我們那分享一個非常有用且地道的表達——spell trouble, 這個短語的含義不是指「拼寫問題」,其正確的含義是:spell trouble 預示著麻煩 The latest opinion