1. kdump简介
coredump为用户态进程段错误等触发的crash现场转储机制, 可利用gdb进行corefile的调试.
kdump为kernel crash/panic等而触发的转储机制, 一般使用crash工具进行调试.
2. kdump原理
预留部分内存(如192MB) 供转储内核使用, 当panic/crash产生时 利用kexec系统调用直接拉起转储内核. 利用该内核进行crash现场的储存dump.
3. kdump使用
ubuntu配置的内核已使能kdump的支持, 故仅需要安装linux-crashdump包即可,
sudo apt-get install linux-crashdump
该包包含crash, kdump-tools, grub等相关依赖.
安装过程中会修改kernel cmdline已预留kdump转储内核内存空间. 以及使能kdump.
reboot重启系统后,
可用以下方式验证:
kdump-config show
4、安装kdump
apt-get install linux-crashdump
根据提示操作
5. 调整crashkernel内存大小为768M(默认192M内存太小)
修改 /etc/defatul/grub.d/kdump-tools.cfg 中 crashkernel=512M-:768M
6. 重新生成grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg
7. reboot 重启生效
手动测试kdump能否正常工作:
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
此时系统会触发kdump,并重启
重启后,/var/crash会保存此次手动触发生成的vmcore
检查生产的文件:
kdump的高级配置
Centos系统和kdump相关的配置文件有两个:一个是/etc/sysconfig/kdump,该文件内的内容一般无需修改 -- 网上一些技术站上在kdump服务启动不成功时修改这里,这里提示下,如果是通过yum源正常安装的,该文件无需修改;一个是/etc/kdump.conf 。这里指的高级配置主机是/etc/kdump.conf ,该配置文件的可配置选项可通过man 5 kdump.conf 获取帮助,这里只列举下常用到的部分:
ubuntu 这里主要配置/etc/default/kdump-tools 和/etc/defatul/grub.d/kdump-tools.cfg。
下面先介绍Centos的配置
1、设置kdump文件成生的位置
控制路径的主要有两部分:
- #raw /dev/sda5
- #ext4 /dev/sda3
- #ext4 LABEL=/boot
- #ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
- #nfs my.server.com:/export/tmp
- #ssh user@my.server.com
- path /var/crash
前面的部分用于设置存储的设备或分区位置--可以是raw裸设备、本地分区、网络路径在本地的挂载点或通过ssh传输,path则是相对的存储路径。如我们通过nfs 将远程的一个分区挂载到本地的/mnt分区下,kdump文件就存储在/mnt/var/crash/下。默认上面的部分不设置就是相对根分区的相对路径,即/var/crash 。
需要特别指出的是,如果使用ssh进行传输,需要配置key认证,使用/etc/init.d/kdump propagate即可配置ssh认证传输,如下:
- kdump.conf中指定ssh网络传输
- ssh root@192.168.0.100/data/
- 执行下面的命令会配置本机到192.168.0.100主机的key认证传输
- # service kdump propagate
- Generating new ssh keys… done.
- The authenticity of host '192.168.0.100 (192.168.0.100)' can't be established.
- RSA key fingerprint is 31:c2:d8:b6:eb:2e:03:64:cd:ba:56:e9:49:6e:5d:6c.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added '192.168.0.100' (RSA) to the list of known hosts.
- root@192.168.0.100's password:
- /root/.ssh/kdump_id_rsa.pub has been added to ~root/.ssh/authorized_keys2 on
- 192.168.0.100
按照上面的配置,当有kdump生成时,会通过scp传输存储在192.168.0.100主机的/data/var/crash 目录下。
2、core_collector控制 (dump保存内存的数据太大,这里配置下可以减少很多数据)
该处是信息收集大小的关键,主要用到makedumpfile命令,centos 上的默认配置如下:
- core_collector makedumpfile -c --message-level 1 -d 31
-c 表示启动zlib进行数据压缩
--message-level 指定了信息收集的级别,1为只打印process indicator 日志信息,默认值为7,具体见下表
- Message | progress common error debug report
- Level | indicator message message message message
- ---------+------------------------------------------------------
- 0 |
- 1 | X
- 2 | X
- 4 | X
- * 7 | X X X
- 8 | X
- 16 | X
- 31 | X X X X X
-d 指定了kdump的过滤级别,具体见下表
- | cache cache
- Dump | zero without with user free
- Level | page private private data page
- -------+---------------------------------------
- 0 |
- 1 | X
- 2 | X
- 4 | X X
- 8 | X
- 16 | X
- 31 | X X X X X
31表示过滤掉以上五种全部信息,这样kdump生成的速度就会更快,生成的vmcore文件也会较小。如果此处使用值0 ,表示不过滤任何信息,在kdump生成时,会记录主机当前的所有信息。这就是为什么在kdump生成时,有些主机只有几十M大小生成,有些主机确有几十 G大小的原因。更多用法可以查看makedumpfile命令的帮助文档。
3、指定default配置
该处的配置,参考了网上的一些配置,一些技术文档上使用的是defult reboot选项,而默认的是defult shell ,两者之间的区别是:
- reboot: If the default action is reboot simply reboot the system and loose the core that you are trying to retrieve.
- shell: If the default action is shell, then drop to an hush session inside the initramfs from where you can try to record the core manually.Exiting this shell reboots the system.
在查看/usr/share/doc/kexec-tools-2.0.0/kexec-kdump-howto.txt帮助手册中的解释更容易理解一些,如下:
- reboot --> reboot the system.
- shell --> drop to a shell with-in initrd. A user can try to capture the
- vmcore manually.
从这个解释可以看到选择shell 可以手工的DIY一些东西,而选择reboot 会在kdump生成后简单直接的reboot 系统。除了上在两个选项,还会poweroff 、halt 可选,如果不是技术研究的目录,在生产环境上我想谁不会选择kdump生成后让系统挂起吧。
除上面三处之外,还有其他配置部分,如debug_mem 的配置等。具体可以看kdump.conf 的man 结果。
下面介绍ubuntu16.04的配置
ubuntu 16.04 没有kdump.conf ,主要配置/etc/default/kdump-tools文件
#MAKEDUMP_ARGS="-c -d 31" 默认是注释的,可以修改
改成 MAKEDUMP_ARGS="-c -d 31 --dump-dmesg"
ubuntu apt-get 比较快的国内源
方法:
1、修改源地址:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources.list
#添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
##清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
更新看看速度:
sudo apt-get update
sudo apt-get upgrade
参考;
无法联网的情况下手动下载:
总共需要下面几个包:
下载完成之后执行
dpkg -i *.deb 可安装
所有包都可以在下面的网站下载安装:
https://packages.ubuntu.com/xenial/linux-crashdump