CentOS7配置kdump

  最近的实验内容是修改内核源码实现屏蔽Linux页面替换功能。然后使用brk写一个验证程序一直往内存中写入数据,同时保证这个验证程序不被OOM杀死(实验的详细过程以后会进行详细整理),观察在内存占用比较多的时候,是否使用交换区空间,以此来验证是否屏蔽成功。
  经过这种方法,已经能确定屏蔽是成功的。但同时还是出现了一些问题,就是当写入内存超出一定数量的时候,系统会出现死机的情况,要想确定系统的极限情况,就要首先弄清楚在接近临界区的时候到底发生了什么,这就要用到内核转储的技术。使用kdump配合crash查看崩溃信息的。


1 kdump简介

  kdump是一种基于kexec的内核崩溃转储技术。kdump需要两个内核,分别是生产内核和捕获内核,生产内核是捕获内核服务的对象,且保留了内存的一部分给捕获内核启动使用。当系统崩溃时,kdump使用kexec启动捕获内核,以相应的ramdisk一起组建一个微环境,用以对生产内核下的内存进行收集和转存。

2 配置kdump

  实验环境:CentOS7
  实验内核:linux-3.10.0-514.el7.x86_64

2.1 安装kexec-tools

  使用kdump服务,必须要用到kexec-tools工具包。

sudo yum update
sudo yum install kexec-tools

  安装完成之后可以通过kexec -version查看kexec的版本。

2.2 配置kdump kernel

  需要为kdump kernel配置内存区域,kdump要求系统正常使用时,不能使用kdump kernel所占用的内存。
  1.修改grub文件

vim /etc/defaule/gurb

  需要将GRUB_CMDLINE_LINUX="crashkernel=auto..."中的auto修改为128M。一般设为128M或256M。
  2.更新grub配置
  只要更改了gurb文件,都需要更改grub配置。

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

  3.重启系统

reboot

2.3 修改kdump默认配置

vim /etc/kdump.conf

  其中,需要注意的三行内容是

path /var/crash            #指定coredump文件放在/var/crash文件夹中
core_collector makedumpfile -c -l -message-level 1 -d 31   #加上-c表示压缩,原文件中没有
default reboot         #生成coredump后,重启系统

2.4 开启kdump服务

systemctl start kdump.service     //启动kdump
systemctl enable kdump.service    //设置开机启动

2.5 测试kdump是否开启

  1.检查kdump开启成功

service kdump status

  如下所示,表示开启成功


CentOS7配置kdump_第1张图片
kdump开启成功

  2.手动触发crash

#echo 1 > /proc/sys/kernel/sysrq
#echo c > /proc/sysrq-trigger

  如果配置成功,系统将自动重启,重新进入系统,可以看到/var/crash文件夹下生成了相应文件,是一个以生成coredump日期为文件名的文件,如图所示:


CentOS7配置kdump_第2张图片
coredump

你可能感兴趣的:(CentOS7配置kdump)