Linux運維--系統卡死排查思路

2020-10-13 11:01:04

現象:Linux系統卡慢甚至卡死的現象
問題定位:
首先檢視系統版本,雖然對於解決此問題沒有太大作用,但是方便自己向公司同事或領導報告此事,總得是要有系統版本的
如果是自己公司的作業系統,那麼檢視系統版本可能有專門的命令,比如我們公司的Kylin作業系統檢視系統版本使用:
cat /etc/.productinfo
一、接下來了解當前系統正在執行使用的應用大概都有哪些,如果系統桌面已經卡死,無法看到執行的應用,可以終端ssh連線上此電腦,(如果ssh都已經連線不上了,要麼是sshd服務也調不起來了,要麼是此電腦與其他電腦的網本來就不通。可以嘗試ctrl+alt+F2切到字元終端,在字元終端檢視程序等)
先使用top實時檢視一下程序佔cpu以及記憶體的情況,因為top是實時重新整理的,比較直觀
但與此同時,top也有弊端,當程序佔資源變化比較快的時候,程序跳來跳去,不方便確認程序名稱,所以這個時候用ps命令
使用ps -aux可以檢視哪些程序佔cpu或者記憶體較高,如果有的程序的值不是特別確定是否正常,可以在其他電腦同環境的情況下也檢視一下做一下對比。如果有程序佔cpu或記憶體的比例特別高,且居高不下,基本就可以確定是該程序卡死了,如果需要急切恢復,可以kill -9殺程序來恢復。
因為排查到這裡只是排查出來是哪一個程序,但這個程序可能是某個服務的子程序,系統環境下如果裝了好多的軟體,那就需要確定這個程序屬於哪個軟體應用的。如果需要檢視到底哪個應用出了問題,就需要根據之前查出來的異常程序進一步查,可以通過程序ID一點點檢視父程序,直到追溯到其應用程序名。此過程中,如果發現應用名已基本顯示出來了,繼續往上追溯,很有可能查出來父程序是系統本身的程序,比如systemd程序,查到類似於這樣的地方的時候其實已經追溯「過頭了」。
根據程序ID往上追溯父程序的方式是:
1、確定了某一個異常程序之後,根據那個程序的ID,使用
ps -ef | grep 程序ID
然後會顯示出來該程序對應的父程序(PPID)
2、中間往上追溯的過程是一樣的,但是要注意判別是否到臨界

至此是卡死時能夠切換到終端輸命令時的排查手段,但有的時候現實情況並非如此,有可能當時電腦卡死時,sshd服務調不起來導致沒辦法另找一臺電腦ssh連過去查資訊,也有可能與此同時,ctrl+alt+F2切字元終端的時候也切不過去了,這個時候有兩種可能,一種是系統卡的死死的,一種是硬體出問題了,比如硬碟故障了,檔案系統直接不工作了。在以上情況下,在保留現狀的情況下基本沒有什麼好排查的了,能做的就是檢查一下硬體狀態,比如硬碟燈亮不亮,以及畫面最後停留在什麼情況下,方便判斷宕機前大概都做了哪些操作。

在這裡需要提醒一下的是
1、在到現場排查問題之前,儘量不要讓使用者輕易恢復故障現場,現象還在的時候比較好排查問題,但是系統一重新啟動可能就不太好查了,因為重新啟動能解決99%的問題,但是重新啟動後卡死現象可能就不出現了,那麼想要判斷之前宕機的原因可能就不太好查,畢竟紀錄檔能記錄的異常資訊是有限的
2、卡死之前客戶都做了哪些操作這是必須要問的,因為如果之後確實沒有通過紀錄檔排查出來哪裡出了問題,那也基本可以從使用者那裡獲得一些資訊,方便自己對某些可能出現此現象的原因做一個大致的判斷

二、接下來說一下在完全卡死,不能切終端,也不能ssh進去的時候怎麼辦
此時,保留的故障現場已經基本沒什麼好查的了,因為命令什麼的都用不了。接下來再把問題記錄清楚然後重新啟動恢復現狀,開始排查紀錄檔,看能不能獲得有用的資訊
1、首先是messages紀錄檔,/var/log目錄下。messages紀錄檔記錄的資訊是比較全的,所以一般先排查這個。
用vim編輯器開啟後,可以先搜尋Runtime journal,定位一下卡死之前系統什麼時間開機的,messages紀錄檔資訊裡的各種資訊都有,可以搜最左側的時間,快速定位發生故障時的那段時間的紀錄檔。也可以通過關鍵字「failed」 「error」「false」等搜尋一下看有沒有錯誤紀錄檔,如果有一些稀奇古怪的紀錄檔不要緊,有的可能是軟體應用執行時的正常紀錄檔資訊,如果確定不了那段紀錄檔裡的資訊到底算不算一種異常,那麼可以找其他電腦做對比
2、其次是服務紀錄檔(這個是確定了哪個應用的問題時查這個),一般在/var/log底下也會有那些應用對應的紀錄檔資訊,紀錄檔名可能跟軟體名或軟體對應的程序名差不多,當然也不排除有的軟體做的紀錄檔資訊不往messages裡寫,也不儲存在/var/log下,有可能是在軟體安裝的路徑或者其他相關路徑下
3、dmesg紀錄檔,該紀錄檔是記錄系統最近一次開機時載入的驅動資訊,以及開機後鍵鼠等硬體的一些響應資訊,檢視該紀錄檔可以看一下有沒有什麼報錯之類的
4、Xorg.0.log紀錄檔,該紀錄檔是記錄的圖形化服務相關的一些紀錄檔資訊,看一下圖形化服務方面有什麼異常沒
5、lightdm.log紀錄檔,該紀錄檔是和登入介面相關的一些紀錄檔資訊,如果系統卡死的時候是在使用者登入介面的時候卡死了,這個紀錄檔就有必要也看一眼
6、.xsession-errors紀錄檔,該紀錄檔在使用者家目錄下(root使用者的是在/root下,普通使用者是在/home/username/下),是隱藏檔案,該紀錄檔資訊是某使用者環境下的圖形化紀錄檔資訊

如果紀錄檔裡沒什麼異常資訊,但是系統確實是完全卡死了,那有可能硬體出問題了,比如硬碟故障了,檔案系統直接崩了,也有可能是其他硬體故障,這個時候就需要叫上硬體廠商一起來看這個問題了
現場的問題如果通過自己的排查手段暫時沒有排查出來,需要請大佬進一步排查,那麼需要記得儲存現場的紀錄檔資訊,記錄出問題的時間點