Linux下定位 OS 故障---配置内存转储工具kdump

Linux下定位 OS 故障—配置内存转储工具kdump

配置内存转储工具

1)当系统崩溃时,需要收集足够的信息来分析引起崩溃的原因。内存转储是一种在系统
崩溃时将全部的内存信息以DUMP文件的形式保存下来的机制。
Linux、Windows、VMware系统均支持内存转储机制。
2)Linux 下配置内存转储 Kdump
Linux系统下由Kdump机制提供内存转储服务。目前主流的Linux系统如RHEL、SLES等
都默认安装Kdump。若使用的OS发行版本没有包含Kdump服务的安装,根据具体情
况,联系OS提供商咨询相关事宜。
相关概念
Kexec
一般情况下,系统通过BIOS引导Linux内核,这是非常耗时的。Kexec是一个快速启动
机制,允许从一个内核已经运行的环境下不通过BIOS引导Linux内核,特别是在大型服
务器或带着大量外设的机器上,这个快速启动机制为开发者节省了大量的时间。
Kdump
Linux kernel是一个相当健全的实体,其稳定性和容错性使得系统一般情况下不会出现
无法挽回的故障从而导致系统崩溃。但是,这类问题还是无法完全避免的,这类问题
被称为Linux crash。
Kdump是一个可靠的新型内核故障转储机制。Kdump是Linux为了发现、收集、分析
crash提供的工具,可以使用它来找到问题的根源,并寻求解决关键性错误的方法。
Kdump机制涉及两种内核
● 标准内核(业务内核):用于运行业务的内核。
● 崩溃内核(捕获内核):用于收集崩溃信息的内核。
Kdump是一个可靠的新型内核故障转储机制。在一个新的内核中执行故障捕获转储而
不是在崩溃内核中直接进行故障捕获,通过Kexec引导进入另一个内核中。这个内核被
称为崩溃内核(crash kernel)或捕获内核(capture kernel),使用很少的内存启动并捕获
故障内存映像。这一小部分内存是标准内核保留的用于Kexec启动崩溃内核,这实质上
就是故障转储的内核。
但并非任何情况下Kdump都能够成功转储,例如中断跳转表挂起、触发严重内核故
障、系统崩溃时存储故障时,就需要结合其他定位手段来获取定位信息。

RHEL 5 下配置内存转储 Kdump

步骤1 执行以下命令编辑/boot/grub/grub.conf文件,添加crashkernel= M@16M参
数。
vi /boot/grub/grub.conf
根据环境中实际的物理内存配置kdump size, 取值请参考 表10-1
在这里插入图片描述
下面以预留128MB容量为例:
#grub.conf generated by anaconda

#Note that you do not have to rerun grub after making changes to this file
#NOTICE: You have a /boot partition. This means that
#all kernel and initrd paths are relative to /boot/, eg.
#root (hd0,0)
#kernel /vmlinuz-version ro root=/dev/sda3
#initrd /initrd-version.img
华为服务器 操作系统
安装指南 10 定位 OS 故障
文档版本 31 (2021-01-25) 版权所有 © 华为技术有限公司 313
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-274.3.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=/dev/sda3 crashkernel=128M@16M
initrd /initrd-2.6.18-274.3.1.el5.img
步骤2 执行:wq命令保存配置并退出编辑。
步骤3 设置kdump开机启动。
~ ]# chkconfig kdump on
步骤4 若当前服务器机型为4路服务器,需将/etc/sysconfig/kdump配置文件中
“KDUMP_COMMANDLINE_APPEND”行下“nr_cpus”的大小设置为“4”。
KDUMP_COMMANDLINE_APPEND=“irqpoll nr_cpus=4 disable_cpu_apicid=0 reset_devices
cgroup_disable=memory mce=off”
步骤5 重启OS。
~ ]# reboot
步骤6 执行以下命令检查kdump状态,当返回如下信息时表示kdump服务正常。
~ ]# service kdump status
Kdump is operational
步骤7 测试kdump配置。

  1. 执行如下两条命令迫使Linux内核崩溃。
    ~ ]# echo 1 > /proc/sys/kernel/sysrq
    ~ ]# echo c > /proc/sysrq-trigger
  2. OS自动重启后,查看“/var/crash/”目录下是否存在“ address-YYYY-MM-DD-
    HH:MM:SS /vmcore”文件。
    – 如果存在,则kdump可正常使用。
    – 如果不存在,则需要重新调整预留内存容量。
    ---- 结束

10.1.1.3 RHEL 6 下配置内存转储 Kdump

本章节指导用户在RHEL 6下配置内存转储Kdump。具体版本OS配置内存转储Kdump
的操作请参考《 华为服务器 操作系统 安装指导 案例集》中各指导书的测试Kdump配
置章节。
RHEL 6安装时默认使能Kdump,配置内存预留为crashkernel=auto,内核会自动为
kdump内核保留适当的内存量 。如需修改预留内存大小,请参考 手动调整预留内存容
量。
建议在安装所有应用程序后测试并验证kdump是否适用于所有系统。
crashkernel=auto保留的内存仅考虑典型的配置。
测试kdump配置步骤如下:
步骤1 执行以下命令确认kdump服务是否运行。
~ ]# service kdump status
Kdump is operational
步骤2 执行如下两条命令迫使Linux内核崩溃。
步骤3 若当前服务器机型为4路服务器,需将/etc/sysconfig/kdump配置文件中
“KDUMP_COMMANDLINE_APPEND”行下“nr_cpus”的大小设置为“4”。
KDUMP_COMMANDLINE_APPEND=“irqpoll nr_cpus=4 disable_cpu_apicid=0 reset_devices
cgroup_disable=memory mce=off”
步骤4 OS自动重启后,查看“/var/crash/”目录下是否存在“ address-YYYY-MM-DD-
HH:MM:SS /vmcore”文件。
● 如果存在,则kdump可正常使用。
● 如果不存在,则需要手动调整预留内存容量,详细操作请参考 手动调整预留内存
容量。
---- 结束
手动调整预留内存容量
自动预留内存时,如果系统带有许多板卡并配置大容量内存可能导致kdump无法正常
工作,建议调整预留内存为512M或更多。
如果使用第三方模块,则必须保留更多内存。
最小预留内存计算公式为:128MB+(每TB物理RAM添加额外的64MB)。
例如:一个系统有1TB内存,则最小预留内存需要128MB + 64MB=192MB。
下面以配置crashkernel=512M为例,操作如下:
步骤1 执行vi命令,打开grub配置文件,配置crashkernel=512M。
● Legacy模式打开“/boot/grub/menu.lst”文件。
● UEFI模式打开“/boot/efi/EFI/redhat/grub.conf”文件。
步骤2 执行:wq命令保存配置并退出编辑。
步骤3 执行reboot命令,重启OS。
步骤4 执行systemctl status kdump命令检查kdump状态,当返回如下信息时表示kdump服
务正常。
在这里插入图片描述
步骤5 执行 步骤1和 步骤4进行kdump测试,确认kdump功能可以正常使用。

10.1.1.4 RHEL 7 下配置内存转储 Kdump

RHEL 7安装时默认使能Kdump,配置内存预留为crashkernel=auto,内核会自动为
kdump内核保留适当的内存量 。如需修改预留内存大小,请参考 手动调整预留内存容
量。
建议在安装所有应用程序后测试并验证kdump是否适用于所有系统。
crashkernel=auto保留的内存仅考虑典型的配置。
测试kdump配置步骤如下:
步骤1 执行以下命令确认kdump服务是运行的。
~ ]# systemctl is-active kdump
active
步骤2 执行如下两条命令迫使Linux内核崩溃。
~ ]# echo 1 > /proc/sys/kernel/sysrq
~ ]# echo c > /proc/sysrq-trigger
步骤3 若当前服务器机型为4路服务器,需将/etc/sysconfig/kdump配置文件中
“KDUMP_COMMANDLINE_APPEND”行下“nr_cpus”的大小设置为“4”。
KDUMP_COMMANDLINE_APPEND=“irqpoll nr_cpus=4 disable_cpu_apicid=0 reset_devices
cgroup_disable=memory mce=off”
步骤4 OS自动重启后,查看“/var/crash/”目录下是否存在“ address-YYYY-MM-DD-
HH:MM:SS /vmcore”文件。
● 如果存在,则kdump可正常使用。
● 如果不存在,则需要手动调整预留内存容量,详细操作请参考 手动调整预留内存
容量。
---- 结束
手动调整预留内存容量
最小预留内存计算公式为:160MB+(每4K系统内存预留2bits)
● 8bit(位)=1Byte(字节)
● 1024Byte(字节)=1KB
● 1024KB=1MB
● 1024MB=1GB
● 1024GB=1TB
以1T内存为例,最小预留内存需要160MB+64MB=224MB。
下面以配置crashkernel=512M为例,操作如下:
步骤1 执行vi /etc/default/grub命令编辑“grub”文件,配置crashkernel=512M。
在这里插入图片描述
步骤2 执行:wq命令保存配置并退出编辑。
步骤3 配置同步到“grub.cfg”文件中。
● UEFI模式执行grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg命令。
● Legacy模式执行grub2-mkconfig -o /boot/grub2/grub.cfg命令。
步骤4 执行reboot命令,重启OS。
步骤5 执行systemctl status kdump命令检查kdump状态,当返回如下信息时表示kdump服
务正常。
在这里插入图片描述
步骤6 执行 步骤1和 步骤4进行kdump测试,确认kdump功能可以正常使用。
---- 结束

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值