Linux故障處理最佳實踐


引言

業務中斷了!

老板咆哮,主管抓狂,而你就是那個要去處理故障、恢復業務的不幸的人。

你獨自一人在陰暗的隔間里。
北邊是老板的辦公室,西邊是Team Leader的辦公室,南面是茶水間,在那你能泡上一杯熱咖啡。
問題沒有一點進展,你郁悶地盯着顯示器。
這時,電話再次響起,你不用接聽也已知道又是一通抱怨用戶連接不上服務器的電話,
因為就在半小時內,已經有四通電話催問你進展了。

 

你將會怎么做?泡一杯咖啡准備通宵苦戰?此時,或許你的心底也充滿無奈:

meme1

Linux服務器上部署的業務出現中斷時,為快速處理問題、消除故障,避免以上苦逼的劇情發生,我們可以做哪些准備嗎?

 

工欲善其事,必先利其器

Linux自身以及開源社區已經提供了很多工具,幫助我們快速定位問題。我們需要做的,就是在故障發生之前,確保機器上安裝了這些工具,並進行適當的配置,使其正常運轉,下面列舉幾個常用的問題診斷工具。

 

syslog/syslog-ng  記錄系統服務進程和操作系統本身的日志,我們可以對日志輸出的內容、輸出到哪些文件進行配置,利用這些日志,可以查到諸如機器重啟時間、命令執行記錄等信息,查看/var/log/messages里記錄的一些異常信息,往往是我們處理問題的第一步。

 

strace  跟蹤進程運行過程中產生的系統調用,當程序、命令執行掛死或緩慢時,我們可以通過分析相關系統調用信息,縮小問題范圍、查找故障原因。

 

atop  通過定時采樣系統資源使用情況、進程運行狀態,為我們提供了較全面的操作系統信息。

 

LKCD/kdump  是一種內核轉儲機制,當系統發生kernel crash時,它將寄存器中的值、內存中的堆棧信息保存到磁盤中,形成的vmcore文件提供了crash時間點所有進程的狀態、內存的使用情況等信息,根據寄存器的值,我們甚至能找到內核中相應的代碼進行分析。

 

除以上所列,ping、ps、lsof、dmesg等查詢命令也被經常用到。

 

現在,我們面前擺放着各式各樣、功能不同的工具,有了這么一個強大的工具套件,是否意味着來一個問題我們就能解決一個,來兩個問題我們就能消滅一雙呢?

 

非也。僅僅擁有齊備的問題診斷工具是遠遠不夠的,更需要我們掌握怎么使用(How)以及什么時候(When)使用這些工具、熟悉Linux操作系統本身,甚至需要深入了解Linux內核源碼。是否能解決、快速解決Linux故障問題,取決於問題處理人員的技能水平。

 

問題處理與個人能力提升

當故障發生時,盡早恢復業務固然重要,但對個人而言,恢復業務並不是目的,更多地是通過處理問題過程提升自己的技能。進行Linux服務器相關故障處理的時,我們需要考量以下幾方面:

  1. 快速解決問題
  2. 提升自身技能
  3. 向高人求助

某年某月某日,一個系統啟動過程中掛死的問題需要你處理,這時恰好你身邊就有一位Linux專家,他對系統啟動過程了如指掌。這時你有兩種選擇:

1.  問Linux專家,問題立馬可以得到解決

2.  查閱相關資料,自己解決問題

 

如果你嘗試依靠自己的能力解決該問題,或許你需要花費很多時間和精力,查閱很多介紹Linux操作系統啟動過程的資料,但因此你也了解了各個啟動階段的功能、對應加載的服務項,甚至能學到在不同啟動階段掛死的恢復處理方法。

 

相比直接使用google搜索答案或問相應專家,獨立解決問題,即使問題最終沒能靠自身力量得到解決,但學習和獨立思考的過程也讓自身的技能得到了提升。

meme3

 

但也並非所有問題都有必要作深入研究,當問題屬於以下類型:

  1. 十分緊急,稍有延誤就會帶來重大損失
  2. 非自身發展領域相關

那我們不妨采取另一種策略,google之,或找相關領域的專家迅速地將問題解決。

 

問題處理參考方法

現在你手頭有很多可用於問題診斷的工具,你也認識到可以通過獨立處理問題,來提升自身技能,接下來就真正進入問題處理環節咯,具體怎么進行問題處理呢?

 

首先我們需要收集問題相關的信息:

1.問題現象

處理問題之前,首先得了解清楚問題現象。

  業務出現異常,是響應慢還是完全沒有響應?

  主機僵死,能否ping通?能否進行終端切換?是crash還是hang?

 

2.發生時間

如果問題發生的時間有一定規律,這時我們可以通過排查系統的定時任務,從而找出問題根因;另外,根據時間點我們可以迅速找到相關日志,減少查找日志花費的時間。

 

3.做過哪些操作

安裝了補丁包?修改了系統配置參數?了解問題出現之前做了什么操作,能為我們處理問題提供指引。

 

4.OS相關信息

利用工具可收集問題出現時間點CPU負載、內存利用、磁盤IO、網絡收發包等OS信息,這些信息為我們提供了較為全面的參考。

為了全面地收集OS信息,需要執行很多命令。這時,可以將這些命令集合到一個腳本中,利用腳本進行信息收集,節省了輸入命令的時間,對於無法自行登錄的遠程服務器,使用腳本收集更顯便捷。

 

總之,信息收集越全越好。即使自己找不出問題根因,后續向他人求助時,也不會因為缺少日志信息而犯愁。

 

了解了問題現象,又有了日志信息,那我們就可以結合日志對問題進行分析了。

首先判別問題類型、縮小問題范圍:

  是硬件問題,還是軟件問題?

  是業務進程層面的,還是系統層面的?

  CPU、內存、網絡、磁盤,哪一方面出現異常?

 

對於可復現(reproducible)的問題,我們可搭建環境進行問題復現,在實驗環境中對問題處理方法進行驗證,可降低對現網環境的影響;對於復雜地、不可復現的問題,我們就得做好長期作戰的准備了,除了收集以上所列信息外,還需記錄問題處理的過程、嘗試過哪些處理方法等,這樣,當有其他人參與進來一同處理該問題的時候,就能更快速地熟悉問題情況。

 

小結

本文討論了Linux故障處理的方式方法。能否順利解決故障,首先取決於我們的技能水平,其次需要依靠各種問題診斷工具。處理問題的過程可以與個人技能提升很好地結合起來,好的處理方式需要經驗的積累,但個中也有規律可尋。

 

從提升個人技能的角度出發,即使面對緊急問題,我們也能變得更加淡定和坦然。再有業務中斷情況,老板、主管都還在抓狂,但你...

meme2

 

Reference: Self-Service Linux

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM