Kernel

確定 Linux 核心崩潰的原因

  • May 12, 2019

我正在執行一個 Ubuntu 12.04 衍生版本(amd64),最近我遇到了非常奇怪的問題。出乎意料的是,X 似乎會完全凍結一段時間(1-3 分鐘?),然後系統將重新啟動。這個系統是超頻的,但在 Windows 中經過驗證非常穩定,這讓我相信我遇到了核心恐慌或我的一個模組出現問題。即使在 Linux 中,我也可以執行 LINPACK 並且不會看到崩潰,儘管給 CPU 帶來了可笑的負載。崩潰似乎是隨機發生的,即使機器處於空閒狀態也是如此。

如何調試導致系統崩潰的原因?

預感它可能是專有的 NVIDIA 驅動程序,我一直恢復到驅動程序的穩定版本,版本 304,但我仍然遇到崩潰。

任何人都可以在崩潰後引導我完成一個好的調試程序嗎?我很樂意啟動一個拇指驅動器並發布我所有的崩潰後配置文件,我只是不確定它們會是什麼。如何找出導致系統崩潰的原因?

這是一堆日誌,通常的罪魁禍首。

.xsession-errors: http: //pastebin.com/EEDtVkVm

/var/log/Xorg.0.log : http://pastebin.com/ftsG5VAn

/var/log/kern.log : http://pastebin.com/Hsy7jcHZ

/var/log/syslog:http://pastebin.com/9Fkp3FMz _ _

我什至似乎根本找不到墜機記錄。

觸發崩潰並不是那麼簡單,它似乎發生在 GPU 試圖一次繪製多個事物時。如果我全屏播放 YouTube 影片並讓它重複一段時間或滾動瀏覽大量 GIF 並彈出 Skype 通知,有時它會崩潰。完全在這個問題上摸不著頭腦。

CPU 超頻到 4.8GHz,但它完全穩定,並且在昨天的大型 LINPACK 執行和 9 小時 Prime95 中倖存下來,沒有一次崩潰。

更新

我已經為我的核心版本 3.2.0-35 安裝了kdumpcrashlinux-crashdump以及核心調試符號。當我apport-unpack在崩潰的核心文件上執行,然後crashVmCore故障轉儲上執行時,我看到的是:

     KERNEL: /usr/lib/debug/boot/vmlinux-3.2.0-35-generic
   DUMPFILE: Downloads/crash/VmCore
       CPUS: 8
       DATE: Thu Jan 10 16:05:55 2013
     UPTIME: 00:26:04
LOAD AVERAGE: 2.20, 0.84, 0.49
      TASKS: 614
   NODENAME: mightymoose
    RELEASE: 3.2.0-35-generic
    VERSION: #55-Ubuntu SMP Wed Dec 5 17:42:16 UTC 2012
    MACHINE: x86_64  (3499 Mhz)
     MEMORY: 8 GB
      PANIC: "[ 1561.519960] Kernel panic - not syncing: Fatal Machine check"
        PID: 0
    COMMAND: "swapper/5"
       TASK: ffff880211251700  (1 of 8)  [THREAD_INFO: ffff880211260000]
        CPU: 5
      STATE: TASK_RUNNING (PANIC)

當我log從該crash實用程序執行時,我在日誌底部看到:

[ 1561.519943] [Hardware Error]: CPU 4: Machine Check Exception: 5 Bank 3: be00000000800400
[ 1561.519946] [Hardware Error]: RIP !INEXACT! 33:<00007fe99ae93e54> 
[ 1561.519948] [Hardware Error]: TSC 539b174dead ADDR 3fe98d264ebd MISC 1 
[ 1561.519950] [Hardware Error]: PROCESSOR 0:206a7 TIME 1357862746 SOCKET 0 APIC 1 microcode 28
[ 1561.519951] [Hardware Error]: Run the above through 'mcelog --ascii'
[ 1561.519953] [Hardware Error]: CPU 0: Machine Check Exception: 4 Bank 3: be00000000800400
[ 1561.519955] [Hardware Error]: TSC 539b174de9d ADDR 3fe98d264ebd MISC 1 
[ 1561.519957] [Hardware Error]: PROCESSOR 0:206a7 TIME 1357862746 SOCKET 0 APIC 0 microcode 28
[ 1561.519958] [Hardware Error]: Run the above through 'mcelog --ascii'
[ 1561.519959] [Hardware Error]: Machine check: Processor context corrupt
[ 1561.519960] Kernel panic - not syncing: Fatal Machine check
[ 1561.519962] Pid: 0, comm: swapper/5 Tainted: P   M     C O 3.2.0-35-generic #55-Ubuntu
[ 1561.519963] Call Trace:
[ 1561.519964]  <#MC>  [<ffffffff81644340>] panic+0x91/0x1a4
[ 1561.519971]  [<ffffffff8102abeb>] mce_panic.part.14+0x18b/0x1c0
[ 1561.519973]  [<ffffffff8102ac80>] mce_panic+0x60/0xb0
[ 1561.519975]  [<ffffffff8102aec4>] mce_reign+0x1f4/0x200
[ 1561.519977]  [<ffffffff8102b175>] mce_end+0xf5/0x100
[ 1561.519979]  [<ffffffff8102b92c>] do_machine_check+0x3fc/0x600
[ 1561.519982]  [<ffffffff8136d48f>] ? intel_idle+0xbf/0x150
[ 1561.519984]  [<ffffffff8165d78c>] machine_check+0x1c/0x30
[ 1561.519986]  [<ffffffff8136d48f>] ? intel_idle+0xbf/0x150
[ 1561.519987]  <<EOE>>  [<ffffffff81509697>] ? menu_select+0xe7/0x2c0
[ 1561.519991]  [<ffffffff815082d1>] cpuidle_idle_call+0xc1/0x280
[ 1561.519994]  [<ffffffff8101322a>] cpu_idle+0xca/0x120
[ 1561.519996]  [<ffffffff8163aa9a>] start_secondary+0xd9/0xdb

bt輸出回溯:

PID: 0      TASK: ffff880211251700  CPU: 5   COMMAND: "swapper/5"
#0 [ffff88021ed4aba0] machine_kexec at ffffffff8103947a
#1 [ffff88021ed4ac10] crash_kexec at ffffffff810b52c8
#2 [ffff88021ed4ace0] panic at ffffffff81644347
#3 [ffff88021ed4ad60] mce_panic.part.14 at ffffffff8102abeb
#4 [ffff88021ed4adb0] mce_panic at ffffffff8102ac80
#5 [ffff88021ed4ade0] mce_reign at ffffffff8102aec4
#6 [ffff88021ed4ae40] mce_end at ffffffff8102b175
#7 [ffff88021ed4ae70] do_machine_check at ffffffff8102b92c
#8 [ffff88021ed4af50] machine_check at ffffffff8165d78c
   [exception RIP: intel_idle+191]
   RIP: ffffffff8136d48f  RSP: ffff880211261e38  RFLAGS: 00000046
   RAX: 0000000000000020  RBX: 0000000000000008  RCX: 0000000000000001
   RDX: 0000000000000000  RSI: ffff880211261fd8  RDI: ffffffff81c12f00
   RBP: ffff880211261e98   R8: 00000000fffffffc   R9: 0000000000000f9f
   R10: 0000000000001e95  R11: 0000000000000000  R12: 0000000000000003
   R13: ffff88021ed5ac70  R14: 0000000000000020  R15: 12d818fb42cfe42b
   ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
--- <MCE exception stack> ---
#9 [ffff880211261e38] intel_idle at ffffffff8136d48f
#10 [ffff880211261ea0] cpuidle_idle_call at ffffffff815082d1
#11 [ffff880211261f00] cpu_idle at ffffffff8101322a

有任何想法嗎?

我有兩個建議開始。

第一個你不會喜歡的。無論您認為您的超頻系統有多穩定,這都是我的第一個嫌疑人。您向其報告問題的任何開發人員都會說同樣的話。您穩定的測試工作負載不一定使用相同的指令,對記憶體子系統的壓力也很大,無論如何。停止超頻。如果你想讓人們相信問題不是超頻,那麼在不超頻時讓它發生,這樣你就可以獲得一個乾淨的錯誤報告。這將對其他人在解決這個問題上投入多少努力產生巨大的影響。擁有沒有錯誤的軟體是一件值得驕傲的事情,但是來自硬體設置特別有問題的人的報告是令人沮喪的,可能根本不涉及真正的錯誤。

第二個是獲取 oops 數據,正如您所注意到的那樣,它不會到達您提到的任何地方。如果崩潰只發生在執行 X11 時,我認為本地控制台幾乎已經失效(無論如何這很痛苦),因此您需要通過串列控制台、網路或保存到本地磁碟來執行此操作(這比這聽起來可能是因為您不希望不可信的核心破壞您的文件系統)。這裡有一些方法可以做到這一點:

  • 使用netdump通過網路保存到伺服器。我已經很多年沒有這樣做了,所以我不確定這個軟體是否仍然存在並與現代核心一起工作,但它很容易,值得一試。
  • 使用串列控制台啟動;兩台機器上都需要一個免費的串列埠(無論是老式的還是 USB 串列適配器)和零調製解調器電纜;您將配置另一台機器以保存輸出。
  • kdump似乎是現在很酷的孩子們使用的東西,而且看起來很靈活,儘管它不是我的偏好,因為它看起來設置起來很複雜。簡而言之,它涉及啟動一個不同的核心,它可以做任何事情並檢查前一個核心的記憶體內容,但是你必須基本上建構整個過程,而且我沒有看到很多罐頭選項。**更新:**實際上有一些不錯的發行版;在 Ubuntu 上,linux-crashdump

獲得調試資訊後,您可以使用一個名為ksymoops的工具將地址轉換為符號名稱,並開始了解您的核心是如何崩潰的。如果符號化轉儲對您沒有任何意義,那麼至少在此處報告或在您的 Linux 發行版的郵件列表/錯誤跟踪器上報告這些內容會有所幫助。


crash您的故障轉儲中,您可以嘗試輸入logbt獲取更多資訊(恐慌期間記錄的內容和堆棧回溯)。不過,您Fatal Machine check似乎來自這裡。通過瀏覽程式碼,您的處理器報告了機器檢查異常- 硬體問題。同樣,我的第一個賭注是由於超頻。似乎log輸出中可能有更具體的消息可以告訴您更多資訊。

同樣從該程式碼來看,如果您使用mce=3核心參數啟動,它將停止崩潰……但我不會真的推薦這個,除非作為診斷步驟。如果 Linux 核心認為這個錯誤值得崩潰,那可能是對的。

引用自:https://unix.stackexchange.com/questions/60574