分析如何查找Linux死機的原因


轉載: https://blog.csdn.net/konglongaa/article/details/82718450

 

  Linux 內核雖然號稱“不死族”,幾乎不會崩潰或者死機,但是特殊情況下,還是有一定幾率會宕機的。因為 Linux 廣泛用於生產環境,所以每一次宕機都會引起相當大的損失。它 Uptime 達到上百天也許你習以為常,但是只要 Down 十幾秒,就會立即急的滿頭大汗。真的很難以想象證交所宕機會怎么樣,也許全國股民會鬧翻天。所以我們需要一些小技巧來查找死機的原因,從而避免死機或者內核崩潰。(話說 windows 天天藍屏也沒感覺呀 :-o 難道已經麻木了 :oops: )

  請注意:以下方法可能不適用於 Server,因為桌面環境和 Server 還是有很大區別的。

  X Crash

  事實上 Linux 內核很少出錯,平常我們所遇到的“死機”都是 X 無響應造成的錯覺。那 X 沒響應了應該怎么處理呢?

  通常套路是 Ctrl + Alt +F7 (F8) 切換到某個 tty,然后用 root 登陸,執行 top 查看吃資源最多的程序,然后使用 pkill/kill/killall 等命令殺死該程序。或使用組合鍵 Ctrl +Alt + Backspace重啟 X (黑日白月注:這個快捷鍵組合在最新的 Ubuntu 和 Fedora 中關閉)。

  如果偶遇切換 tty 失敗或者沒響應,可以試着使用 SSH 登陸此電腦,然后再殺死程序。也許只是 X不響應,而內核和 SSH daemon 仍然工作,故此可以實施此法。

  arch 配置 SSH daemon

  萬一 X 不給力,各種方法試了無效,又沒有辦法通過 SSH 登陸到此 pc,那怎么辦呢?別着急,我們還有萬能的 “reisub” 大法。不過在啟用前先要激活內核 sysrq 功能 (via) .系統啟動時執行:echo “1” > /proc/sys/Kernel/sysrq 或者修改/etc/sysctl.conf 文件,設置 Kernel.sysrq = 1.系統異常時依次按下 Alt+sysrq+{reisub} ,然后系統會自動重啟。(有關 sysrq 請看:Linux 死機了怎么辦?)

  不建議長按 Power 按鍵強制關機,有可能損壞硬件或者丟失數據,甚至導致磁盤壞道!

  X 崩潰而內核完好

  常見的症狀有:程序無響應,花屏,鼠標移動指針無動作,鍵盤輸入沒有識別等。但后台的音樂可以正常播放,或者鍵盤 Caps Lock/Num Lock/Scroll Lock 按鍵按后對應 LED 可以正常亮滅。遇到此種情況可以使用上述方法重啟 X 或者電腦即可恢復正常。

  Application Crash

  這個比較常見,但是也是相當難解決的。因為 Linux 上的應用軟件大部分都是開源的,所以可能沒有超高的穩定性。也許由於庫的缺少或者版本錯誤,或者代碼的 Bug,都有可能導致程序出現異常。

  一般遇到這種問題,建議檢查配置文件是否正確,對配置文件的錯誤修改可能導致程序的運行失敗。如果您確信配置文件沒有錯誤但是程序仍然異常,可以嘗試把配置文件刪除(注意備份!),然后再次打開軟件嘗試。通常程序的配置文件在:

  ● ~/.[APPNAME]● ~/.config/[APPNAME]● /etc/[APPNAME].conf

  或者有可能是庫的錯誤,您可以在終端輸入程序名或者程序路徑運行程序,根據終端的提示信息除錯。由於導致程序崩潰的可能性多種多樣,在此不能一一列舉,所以建議您根據出錯信息去 google 搜索並找到解決方案

  Kernel Panic

  X 的問題還好辦,可是如果 RPWT 碰到 Kernel Panic,那可真是上天無路入地無門,撞牆的心都有 :evil: .

  一般引起 Kernel Panic 的原因很多,但是都比較罕見。例如硬件問題 (irqconfilct, bad block, hightemperature),軟件問題(錯誤的 mod,內核的 Bug),或者文件系統不支持(沒有內建 ext4 支持卻掛載ext4 的 root 分區),硬件的變動(如添加/更換內存,不支持架構的cpu),錯誤的驅動。

  Kernel Panic 的表現形式也是多種多樣:啟動失敗,不正常的長時間 io 操作,鍵盤燈的不正常頻閃,wireless 等指示燈錯誤閃爍,無響應(請區別 xorg crash 情況),徹底鎖死,黑屏,reisub 大法不靈 等等。

  [PageNext]

  一般情況下,秉承 KISS 原則的 Linux 內核,會盡力解決一切錯誤並正常運行,如果遇到極端情況發生 Panic,它會盡可能把所有相關信息顯示在屏幕上——至於多少,別奢求,Kernel 已經盡力了。

  因為 Kernel Panic 是一種很極端的情況,有的人可能自從使用 Linux 就沒有遇到過。所以我們要收集所有相關的信息來解決問題。發生錯誤后的各種輸出是最直接的最有效的( Dump 在 tty.請關閉 x)。因為 Kernel 已經崩潰,不一定能找到完整的 Log.您可以根據以下線索嘗試:

  1、/var/log/messages —— rp 爆發的時候,也許會記錄下很多相關信息。按照時間戳查找。

  2、回溯操作 —— 回憶 KernelPanic 之前所做的所有事,並回滾。(如安裝了某個程序,可以在 /var/log/pacman.log 找到安裝日志)

  3、Dump 信息 —— 屏幕輸出信息是系統最后的“遺言”,請使用數碼相機或者筆紙記錄。(ttyonly)

  接下來就應該根據錯誤發生的可能原因進行排除。將內核啟動參數化為最簡形式,不應附加任何不必要參數,並 BIOS 中禁用掉所有無關硬件。相關日志文件:

  ● /var/log/boot

  ● /var/log/xorg 所有相關(僅參考)

  ● /var/log/messages

  如果可以,您應該記錄下所有屏幕輸出信息,並查看 /var/log/messages .

  可能遇到的問題,和解決方法:

  1、irq conflict (還好我沒碰到),可以嘗試從 bios 修改硬件irq,或者升級 bios,都不生效就換電腦或者禁用沖突硬件;

  2、bad balock,嘗試修復壞道或者屏蔽壞道分區,建議更換磁盤;

  3、io error,同上,也有可能是沒有內建文件系統支持的原因,重新編譯內核或者找最新版的內核安裝;

  4、mod,刪除可能導致錯誤的內核模塊(如 vboxdrv),涉及到的命令有:

  1)lsmod: 列出已載入的模塊2)modprobe: 載入模塊( 黑日白月注:在這里和其他命令對應的為 insmod + depmod 比較好,modprobe 更類似於 XXXmod 系列命令的升級整合版本。)

  3)rmmod: 移除內核中模塊,效果等同於 modprobe -r 4)modinfo:顯示模塊相關信息

  5、driver,a卡或者n卡驅動,也容易造成問題;

  6、硬件本身的問題導致,建議檢測硬件可用性和兼容性(例如 memtest+);

  7、內核 bug,如果您有能力,建議使用KDB (Kernel debugger) 排錯,或者重新編譯內核;

  8、不負責任的告訴您,最好的方法是換 windows :mrgreen:


免責聲明!

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



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