详解linux kernel core dump

407 阅读3分钟

创建Kernel Core dump

要在 SUSE Linux Enterprise Server (SLES) 15 SP4 中触发内核core dump,您需要配置 kdump - 一种在内核崩溃时捕获内存转储的服务。步骤如下:

  1. kdump 如果尚未安装该软件包,请安装它 :

sudo zypper 安装 kdump

  1. 启用该 kdump 服务:

sudo systemctl 启用 kdump.service

  1. 配置 kdump 为故障转储保留内存。打开 /etc/default/grub 并添加 crashkernel=256M 到该 GRUB_CMDLINE_LINUX_DEFAULT 行:

GRUB_CMDLINE_LINUX_DEFAULT="安静启动 crashkernel=256M"

  1. 更新 GRUB 配置:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

  1. 重新启动系统以使更改生效:

reboot

  1. 系统重新启动后,您可以使用触发器手动触发内核崩溃(用于测试目的) sysrq

echo | sudo tee /proc/sysrq-trigger

这将导致内核恐慌并在 /var/crash/.

请注意,触发内核崩溃将导致您的系统崩溃并重新启动,并且只能用于测试目的。

未产生kernel core dump的可能原因有哪些?

如果/var/crash中没有core dump ,可能有以下几个原因:

  1. 未发生内核崩溃:内核崩溃时会生成core dump。如果没有内核崩溃,就不会有任何core dump。
  2. kdump 服务未运行:需要运行 kdump 服务才能捕获core dump。您可以使用 检查其状态 systemctl status kdump.service
  3. 为 kdump 保留的内存不足:如果为 kdump 保留的内存不足,它将无法捕获core dump。您可以检查文件中的保留内存 /etc/default/grub ,查找该 crashkernel 选项。
  4. core dump已禁用*:可以禁用core dump。检查文件 /etc/sysctl.conf/etc/sysctl.d/ 目录中是否存在禁用core dump的任何设置。
  5. 存储空间问题:如果文件系统上没有足够的空间,则无法保存core dump。使用 . 检查您的文件系统使用情况 df -h
  6. 配置不正确:如果 kdump 配置文件 ( /etc/kdump.conf) 未正确配置,则可能无法正确保存core dump。

如果您检查了所有这些,但仍然找不到core dump,您可能需要检查系统日志中是否有与 kdump 或内核崩溃相关的任何错误消息。您可以使用该 journalctl 命令查看系统日志。

如何分析kernel core dump

要打开并分析 SUSE Linux Enterprise Server (SLES) 上的内核core dump,您可以使用该 crash 实用程序。该工具允许您检查 Linux 系统在崩溃或离线时的状态。

以下是安装和使用步骤 crash

  1. crash 如果尚未安装该软件包,请安装它 :

sudo zypper 安装崩溃

  1. 安装后,您可以使用它 crash 来打开 vmcore 文件(内核core dump文件)。该命令还需要与 vmcore 的内核版本匹配的 vmlinux 文件(未压缩的内核文件)。vmlinux 文件通常位于该 /usr/lib/debug/lib/modules/$(uname -r)/vmlinux 目录中。

sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/your-vmcore-file

替换 your-vmcore-file 为 vmcore 文件的路径。

  1. 这将打开一个交互式会话,您可以在其中分析core dump。您可以使用 bt (回溯)、 ps (进程状态)、 log (系统日志)等命令来检查崩溃时系统的状态。

请注意,分析内核core dump可能很复杂,并且通常需要对 Linux 内核有深入的了解。如果您正在处理严重的系统问题,最好联系 SUSE 支持部门寻求帮助。