Linux 内核崩溃:如何收集信息?

Linux 内核崩溃:如何收集信息?

我正在开发一个 node.js 应用程序 --- 它经常使我的 Debian Linux 内核崩溃:计算机变得无响应,甚至不响应“ping”。

在这个阶段,我什至不要求分析或修复崩溃的原因。我没有任何信息可以指出任何具体的事情。计算机只是停止响应,既不显示/var/log/messages也不dmesg显示任何消息。

所以我的问题是:我可以使用哪些工具来收集有关崩溃的一些信息?


以下是一些背景细节:

我的 node.js 应用程序不使用网络堆栈。它只是生成两个子进程并child_process.spawn通过写入文件与它们进行通信,监视文件更改fs.watch并读取已更改的文件。剩下的只是数据处理。

我在三台电脑上测试过这个问题:

  • 在第一个(我的主开发机器)上,系统在启动该应用程序几次后可靠地冻结。
  • 在其他计算机(类似于主开发机的 PC 和 digitalocean VPS)上,该应用程序通常运行良好 --- 但在运行数百次后,它冻结了其他计算机。

看来我的主开发机器更容易出现这个问题 --- 但因为冻结也发生在两台不相关的机器上,所以我认为这不是仅限于一台 PC 的纯硬件问题。

由于计算机在启动应用程序后立即冻结,我确信该应用程序会导致此问题。由于一切都停止了(包括对 ping 的响应),我认为 Linux 内核已经崩溃了。

答案1

通常,Linux 内核崩溃会在系统控制台上可见。但是,以防万一它确实是内核崩溃,但在您的情况下,无论出于何种原因您可能想确认它确实是内核崩溃,它都是不可见的。为此,您可以将系统配置为在内核崩溃后自动重新启动,如下所示:配置 Linux 内核恐慌时重新启动。如果系统最终重新启动,那么它确实是内核崩溃,然后您可以专注于该调查路径(堆栈交换站点上有大量相关答案)。

但从你的描述来看,我认为这更有可能是内核挂起或“太忙”的情况,你可以从这里开始:如何调查总挂起的原因?

最后,由于您观察到根本原因似乎更有可能是您的应用程序,因此我认为它以某种方式导致系统负载过多,导致系统变得无响应。您可以检查您的代码是否有任何长度/无限循环,并尝试限制它们的影响:在一定的执行时间(可能使用一些超时异常)或一定数量的迭代之后等之后中断。如果系统在一段时间后再次响应,然后您会更好地了解代码的哪个区域有问题,以及它如何影响系统。

相关内容