创建Kernel Core dump
要在 SUSE Linux Enterprise Server (SLES) 15 SP4 中触发内核core dump,您需要配置 kdump - 一种在内核崩溃时捕获内存转储的服务。步骤如下:
kdump如果尚未安装该软件包,请安装它 :
sudo zypper 安装 kdump
- 启用该
kdump服务:
sudo systemctl 启用 kdump.service
- 配置
kdump为故障转储保留内存。打开/etc/default/grub并添加crashkernel=256M到该GRUB_CMDLINE_LINUX_DEFAULT行:
GRUB_CMDLINE_LINUX_DEFAULT="安静启动 crashkernel=256M"
- 更新 GRUB 配置:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- 重新启动系统以使更改生效:
reboot
- 系统重新启动后,您可以使用触发器手动触发内核崩溃(用于测试目的)
sysrq:
echo | sudo tee /proc/sysrq-trigger
这将导致内核恐慌并在 /var/crash/.
请注意,触发内核崩溃将导致您的系统崩溃并重新启动,并且只能用于测试目的。
未产生kernel core dump的可能原因有哪些?
如果/var/crash中没有core dump ,可能有以下几个原因:
- 未发生内核崩溃:内核崩溃时会生成core dump。如果没有内核崩溃,就不会有任何core dump。
- kdump 服务未运行:需要运行 kdump 服务才能捕获core dump。您可以使用 检查其状态
systemctl status kdump.service。 - 为 kdump 保留的内存不足:如果为 kdump 保留的内存不足,它将无法捕获core dump。您可以检查文件中的保留内存
/etc/default/grub,查找该crashkernel选项。 - core dump已禁用*:可以禁用core dump。检查文件
/etc/sysctl.conf或/etc/sysctl.d/目录中是否存在禁用core dump的任何设置。 - 存储空间问题:如果文件系统上没有足够的空间,则无法保存core dump。使用 . 检查您的文件系统使用情况
df -h。 - 配置不正确:如果 kdump 配置文件 (
/etc/kdump.conf) 未正确配置,则可能无法正确保存core dump。
如果您检查了所有这些,但仍然找不到core dump,您可能需要检查系统日志中是否有与 kdump 或内核崩溃相关的任何错误消息。您可以使用该 journalctl 命令查看系统日志。
如何分析kernel core dump
要打开并分析 SUSE Linux Enterprise Server (SLES) 上的内核core dump,您可以使用该 crash 实用程序。该工具允许您检查 Linux 系统在崩溃或离线时的状态。
以下是安装和使用步骤 crash:
crash如果尚未安装该软件包,请安装它 :
sudo zypper 安装崩溃
- 安装后,您可以使用它
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 文件的路径。
- 这将打开一个交互式会话,您可以在其中分析core dump。您可以使用
bt(回溯)、ps(进程状态)、log(系统日志)等命令来检查崩溃时系统的状态。
请注意,分析内核core dump可能很复杂,并且通常需要对 Linux 内核有深入的了解。如果您正在处理严重的系统问题,最好联系 SUSE 支持部门寻求帮助。