kdump 无法记录服务器崩溃事件

kdump 无法记录服务器崩溃事件

我在一台机器上运行 Ubuntu Server 14.04,这台机器在负载下会随机崩溃。服务器不会独立重启,但无法通过 ssh 或直接 KVM 连接访问。

我怀疑是 CPU 问题,但我正在寻找确凿的证据,因此我按照此处的说明进行操作:

https://wiki.ubuntu.com/Kernel/CrashdumpRecipe

/var/crash然而,无论是自然崩溃还是诱发崩溃后,都不会出现日志文件。


细节:

(我在每个这里描述的改变之间都引发了一次崩溃,但没有任何改变。)

一切都很顺利,直到我到了这一步:

$ cat /sys/kernel/kexec_crash_loaded
0

预期输出为 1。经过一番挖掘,我发现了/etc/default/kdump-tools,我在其中设置了USE_KDUMP=1。当这不起作用时,我KDUMP_SYSCTL="kernel.panic=60 kernel.panic_on_oops=1"根据sysctl 文档。还是没有效果,所以我直接用修改了参数,sysctl -w kernel.panic=60据说可以为 kdump 增加额外的时间来执行其工作。

在每种情况下,我都会运行:

echo c | sudo tee /proc/sysrq-trigger

计算机将按预期崩溃并重新启动,但我所看到的只有以下内容:

$ ls /var/crash
kexec_cmd

/var/log/kern.log仅包含启动时的日志条目,而不包含崩溃时的日志条目。(不确定这是否是预期的,但我还是想提一下。)

我的配置有问题吗?

答案1

如果/boot位于单独的分区上,Ubuntu 上的内核崩溃转储将由于 ---> 而失败漏洞它在 14.04 Trusty 中仍然存在,你能相信吗?至少对于使用 LVM 和单独的/boot.

解决方法是

  1. unmount /boot然后将其安装到其他安装点,例如/mnt
  2. 将内容复制到/boot(与 位于同一块设备上的那个/)。例如rsync -axHAX --progress --stats /mnt/ /boot
  3. 使用以下方式触发崩溃echo c | sudo tee /proc/sysrq-trigger
  4. 如果一切顺利,您将看到以/var/crash(uname -r)-yyyymmddHHmm.crash 形式出现的内核崩溃转储以及带有 dmesg 和 dump 的 yyyymmddHHmm 目录。

如果您想分析崩溃转储,您将需要crash,请按如下所示运行它:

crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/yyyymmddHHmm/dump.yyyymmddHHmm

有关崩溃的更多信息,请阅读手册。

/etc/default/kdump-tools顺便说一句:更改后不要忘记重新加载 kdump-tools 配置kdump-config load

答案2

可能是预留内存太小了(我的问题就是这个原因导致的)。

我认为你应该从三个步骤检查正确的事情。首先,按照[Ubuntu 内核崩溃转储]检查你的配置:https://help.ubuntu.com/lts/serverguide/kernel-crash-dump.html

第二dmesg|grep -i crash,检查预留内存是否正常。

第三,service kdump-tools status检查加载kdump内核是否正常。

第三步,日志很重要,查看/var/log/syslog日志,然后找出原因。

相关内容