调整 crashkernel 参数
这种方式简单,但在大内存系统中可能不足,在小内存系统中可能浪费。偏移预留方式不常用,因为用户很难确定预留内存的起始位置。是一个管理 kdump 服务的工具,允许管理员启动、停止、检查 kdump 的状态,并重新加载配置。参数的值需要考虑系统的内存大小、系统的工作负载和捕获内核所需的资源。的值能够确保在系统崩溃时,捕获内核能够顺利启动并成功转储内存信息。从 16MB 内存地址开始,结合可变预留和偏移
调整 crashkernel 参数
调整 crashkernel
参数的值需要考虑系统的内存大小、系统的工作负载和捕获内核所需的资源。一般情况下,合理配置 crashkernel
的值能够确保在系统崩溃时,捕获内核能够顺利启动并成功转储内存信息。
1. 内存预留策略
在配置 crashkernel
参数时,主要有以下几种预留策略:
- 固定预留:直接指定固定的内存量。
- 可变预留:根据系统总内存大小动态分配。
- 偏移预留:从特定内存地址开始预留。
- 可变预留 + 偏移预留:结合可变预留和偏移预留策略。
2. 配置示例
2.1 固定预留
crashkernel=128M
此配置直接预留 128MB 内存给捕获内核。这种方式简单,但在大内存系统中可能不足,在小内存系统中可能浪费。
2.2 可变预留
crashkernel=512M-2G:64M,2G-:128M
根据系统总内存大小动态预留内存:
- 系统内存小于 512MB 时,不预留内存。
- 系统内存在 512MB 到 2GB 之间时,预留 64MB 内存。
- 系统内存大于 2GB 时,预留 128MB 内存。
2.3 偏移预留
crashkernel=128M@16M
从 16MB 内存地址开始预留 128MB 内存。偏移预留方式不常用,因为用户很难确定预留内存的起始位置。
2.4 可变预留 + 偏移预留
crashkernel=512M-2G:64M,2G-:128M@16M
从 16MB 内存地址开始,结合可变预留和偏移预留策略。
3. 如何选择合适的 crashkernel
值
选择合适的 crashkernel
值需要综合考虑系统的具体情况。以下是一些建议:
-
小内存系统(< 2GB):
- 可以使用固定预留方式,例如
crashkernel=128M
。
- 可以使用固定预留方式,例如
-
中等内存系统(2GB - 8GB):
- 可以使用可变预留方式,例如
crashkernel=512M-2G:64M,2G-:128M
。
- 可以使用可变预留方式,例如
-
大内存系统(> 8GB):
- 使用较大值的可变预留方式,例如
crashkernel=2G-:256M
。
- 使用较大值的可变预留方式,例如
4. 示例:调试 crashkernel
配置
假设有一台系统,总内存为 16GB,配置 crashkernel
如下:
crashkernel=512M-2G:64M,2G-:128M
在配置文件 /etc/default/grub
中添加或修改 GRUB_CMDLINE_LINUX
选项:
GRUB_CMDLINE_LINUX="crashkernel=512M-2G:64M,2G-:128M rhgb quiet"
然后更新 GRUB 配置:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重新启动系统以使配置生效。
5. 验证配置
重新启动系统后,可以通过以下命令验证 crashkernel
配置是否生效:
dmesg | grep -i crashkernel
输出示例:
[ 0.000000] Reserving 128MB of memory at 3145728k for crashkernel (System RAM: 16777216k)
此输出表明系统已预留 128MB 内存用于 crashkernel。
6. 使用 kdumpctl
工具管理 kdump
kdumpctl
是一个管理 kdump 服务的工具,允许管理员启动、停止、检查 kdump 的状态,并重新加载配置。
启动 kdump 服务:
sudo kdumpctl start
检查 kdump 状态:
sudo kdumpctl status
7. 调整 kdump
配置
如果需要修改 kdump
的 cmdline 参数,可以编辑相关配置文件。以下是示例:
在 /etc/kdump.conf
文件中添加或修改 extra_cmdline
选项:
extra_cmdline="crashkernel=512M-2G:64M,2G-:128M rhgb quiet"
然后重新加载 kdump
配置:
sudo kdumpctl restart
8. 触发和测试 kdump
为了测试 kdump
,可以手动触发系统崩溃。请谨慎操作,因为这会导致系统立即重启并生成崩溃转储文件。
启用 sysrq:
echo 1 | sudo tee /proc/sys/kernel/sysrq
触发崩溃:
echo c | sudo tee /proc/sysrq-trigger
系统会重启,并生成崩溃转储文件。可以在 /var/crash
目录下找到转储文件。
9. 使用 crash
工具分析 vmcore 文件
加载并分析生成的 vmcore
文件:
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/<日期和时间>/vmcore
使用 crash
命令进行分析,例如查看崩溃时的内核堆栈:
crash> bt
通过上述步骤,可以配置和验证 crashkernel
参数,确保在系统崩溃时能够成功生成和分析内存转储文件。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)