如何在Aliyun Linux 2系统中配置Kdump?
概述
Aliyun Linux 2系统提供了Kdump服务。开启该服务后可捕获内核错误,方便您对内核崩溃现象进行分析。开启Kdump时会占用一部分操作系统内存空间,对应的用户态系统服务kdump.service可能会影响系统启动速度。鉴于此,在Aliyun Linux 2系统中, Kdump服务不是默认全部开启的,用户需要根据业务实际需求,进行相应的配置。本文重点介绍在Aliyun Linux 2系统中,Kdump服务的打开和关闭选项,并解释对应的风险和应对方法。
详细信息
阿里云提醒您:
•如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
•如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
•如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
内核启动选项crashkernel的说明
Kdump服务的开启依赖于内核运行时预留一段内存地址空间,该内存地址空间的大小由内核命令行参数/proc/cmdline中的crashkernel选项指定。我们默认在Grub中添加了crashkernel选项,并分段式指定内存大小,整体选项为crashkernel=0M-2G:0M,2G-8G:192M,8G-:256M。
•当您购买的ECS实例内存,或者手工配置的操作系统内存大小不超过2GiB时,由于应用程序本身可用的内存数量已处于紧缺状态,将不再为操作系统预留内存。因此,系统内存小于2GiB时,您将无法使用Kdump功能。
•当您购买的ECS实例内存,或者手工配置的操作系统内存大小超过2GiB,但是不超过8GiB时,系统将预留192MiB的内存大小。
•当您购买的ECS实例内存,或者手工配置的操作系统内存大小超过8GiB时,系统将预留256MiB的内存大小。
要验证当前操作系统是否成功预留了相应大小的内存空间,可在操作系统内部执行如下命令查看。
cat /sys/kernel/kexec_crash_size
系统返回类似如下。
201326592
注:返回结果中的kexec crash size单位为字节。
Kdump系统服务的开启与关闭
仅有crashekernel内核启动选项是无法实现Kdump完整功能的,还需要配合Kdump服务。参考如下步骤,开启或关闭Kdump服务。
1.参考如下两种方式,检查Kdump服务的运行状态。
▫执行下列命令,查看服务的运行状态。如果返回结果中Active的值为inactive,则说明Kdump服务处于未激活状态。
systemctl status kdump.service
▫执行下列命令,查看内核接口提示的状态。如果返回结果为“0”,则说明Kdump服务处于未激活状态。
cat /sys/kernel/kexec_crash_loaded
2.可参考如下命令,开启或关闭Kdump服务。
▫开启Kdump服务。
systemctl start kdump.service
▫关闭Kdump服务。
systemctl stop kdump.service
3.参考步骤1,确认Kdump服务的运行状态符合预期。
4.您还可以参考如下命令,选择Kdump服务是否开机自启。
▫开机自启。
systemctl enable kdump.service
▫禁止开机自启。
systemctl disable kdump.service
彻底禁用Kdump服务并归还内存地址空间
如果您的实例无需启用Kdump服务,并希望将系统预留的内存地址空间归还给操作系统本身,以避免资源浪费,可执行下列命令,彻底关闭Kdump服务。
sh -c 'echo 0 > /sys/kernel/kexec_crash_size'
systemctl disable kdump.service
systemctl stop kdump.service
通过下列命令验证内存地址空间不再为Kdump预留,即返回值为“0”。
cat /sys/kernel/kexec_crash_size
0
注:Kdump服务预留的内存地址空间归还给操作系统后,必须重启操作系统才可再次开启Kdump服务。
我有话说: