Linux 核心崩潰:如何收集資訊?
我正在開發一個 node.js 應用程序 — 它經常使我的 Debian Linux 核心崩潰:電腦變得無響應,甚至沒有響應“ping”。
在這個階段,我什至不要求分析或修復崩潰的原因。我沒有任何資訊可以指向任何具體的東西。電腦只是停止響應,既不
/var/log/messages
也不dmesg
顯示任何消息。所以我的問題是:我可以使用哪些工具來收集有關崩潰的一些資訊?
以下是一些背景細節:
我的 node.js 應用程序不使用網路堆棧。它只是產生兩個子程序
child_process.spawn
並通過寫入文件與它們通信,監視文件更改fs.watch
並讀取已更改的文件。剩下的只是數據處理。我在三台電腦上測試過這個問題:
- 在第一個(我的主要開發機器)上,系統在啟動此應用程序幾次後可靠地凍結。
- 在其他電腦(類似於主開發電腦和 digitalocean VPS 的 PC)上,該應用程序通常執行良好 — 但在執行數百次後,它凍結了其他兩台電腦。
似乎我的主要開發機器更容易出現這個問題 — 但由於凍結也發生在兩台不相關的機器上,我認為這不是僅限於一台 PC 的純硬體問題。
由於啟動應用程序後電腦立即凍結,因此我確定該應用程序會導致此問題。由於一切都停止了(包括對 ping 的響應),我認為 Linux 核心已經崩潰。
通常,系統控制台上會顯示 linux 核心崩潰。但是,以防萬一它確實是核心崩潰,但在您的情況下,無論出於何種原因,它都不可見,您可能想確認它確實是核心崩潰。為此,您可以將系統配置為在核心崩潰後自動重啟,如下所示:Configure reboot on Linux kernel panic。如果系統最終重新啟動,那麼它確實是核心崩潰,然後您可以專注於該調查路徑(堆棧交換站點上有很多相關答案)。
但是根據您的描述,我認為這更有可能是核心掛起或“太忙”的情況,您可以從這裡開始:如何調查總掛起的原因?.
最後,由於您觀察到根本原因似乎更可能是您的應用程序,我認為它以某種方式導致系統負載過大,導致系統無響應。您可以檢查您的程式碼是否有任何冗長/無限循環並嘗試限制它們的影響:在一定的執行時間後(可能使用一些超時異常)或在一定數量的迭代後中斷等。如果系統在一段時間後再次響應然後您會更好地了解程式碼的哪個區域有問題,以及它可能如何影響系統。