確定 Linux 核心崩潰的原因
我正在執行一個 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 安裝了
kdump
、crash
和linux-crashdump
以及核心調試符號。當我apport-unpack
在崩潰的核心文件上執行,然後crash
在VmCore
故障轉儲上執行時,我看到的是: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
您的故障轉儲中,您可以嘗試輸入log
並bt
獲取更多資訊(恐慌期間記錄的內容和堆棧回溯)。不過,您Fatal Machine check
似乎來自這裡。通過瀏覽程式碼,您的處理器報告了機器檢查異常- 硬體問題。同樣,我的第一個賭注是由於超頻。似乎log
輸出中可能有更具體的消息可以告訴您更多資訊。同樣從該程式碼來看,如果您使用
mce=3
核心參數啟動,它將停止崩潰……但我不會真的推薦這個,除非作為診斷步驟。如果 Linux 核心認為這個錯誤值得崩潰,那可能是對的。