kdump内核
什么是kdump?
kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。由于能够分析核心转储显著有助于确定系统故障的确切原因,强烈建议启用此功能。
kdump 需要两个不同目的的内核,这两个内核被称为kdump kernel,生产内核和捕获内核。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的 ramdisk 一起组建一个微环境,用以对生产内核下的内存进行收集和转存。
如何配置kdump?
1、安装kexec-tool
使用kdump服务,就必须安装kexec-tools工具包。安装命令如下:
yum update
yum install kexec-tools
2、配置grub
需要配置为kdump kernel的内存区域。kdump要求操作系统正常使用的时候,不能使用kdump kernel所占用的内存,配置这个需要修改/etc/dedfault/grub
文件。文件内容如下:
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=128M vconsole.font=latarcyrheb-sun16 vconsole.keymap=us biosdevname=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
修改文件中GRUB_CMDLINE_LINUX这行,可以设置kdump kernel的大小,一般都是128M或者256M。修改完成以后运行下面的命令更新grub的配置
#grub2-mkconfig -o /boot/grub2/grub.cfg
然后重启系统,使上面对系统的配置有效。
3、配置kdump类型
上面我们已经按照kdump的要求对系统进行了一系列的配置,下面就是配置kdump,配置文件是/etc/kdump.conf
。默认的vmcore文件存储在/var/crash
目录下。可以修改这个路径:
path /usr/local/cores //这里必须要保证这个路径是存在的,否则启动kdump服务会失败
或者你直接把core dump文件写入一个设备中,把配置文件中的#raw /dev/vg/lv_kdump
这一行的#
符号去掉然后把后面的改成自己的设备路径,如下
raw /dev/sdb1
如果要把dump文件存储在一个使用NFS协议的远程机器上,把配置文件中的#nfs my.server.com:/export/tmp
这行前面的#
符号删除,然后后面参数部分替换成自己的主机名和路径名。如下
nfs penguin.example.com:/export/cores
4、配置core收集器
为了减少为vmcore转储文件的大小,内核转储允许你指定一个外部应用程序(一个core收集器)对数据进行压缩,和可选的删除所有不相关的信息。目前,唯一完全支持的core收集器是makedumpfile。
为了启用core收集器,在root权限下修改/etc/kdump.conf
配置文件,删除#core_collector maledumpfile -l --message-level 1 -d 31
这行前面的#
符号,然后修改为如下(启动dump文件的压缩,加上-c参数):
core_collector makedumpfile -c
为了删除dump文件中的某些页(写0的或者空闲的页),加上-d参数,-d参数后面的数字表示你想要省略的页面总数。如下:
core_collector makedumpfile -d 17 -c
5、配置kdump的默认操作
当kdump在指定的位置创建core文件失败,root文件系统会被挂在,kdump会试图把dump文件保存在本地。可以通过修改/etc/kdump.conf
配置文件修改这个默认操作。修改#default shell
这行,然后把shell替换为自己想要的默认动作。例如:
default halt
如何启用kdump?
在系统boot时候启动kdump服务
systemctl enable kdump.service
现在应该为多用户启用了kdump服务,相对的systemctl stop kdump
可以禁用这个服务。在root权限下,使用下面的命令可以使kdump服务在当前会话可用:
systemctl start kdump.service
这里要注意的是当kdump服务启动时候,前面定义为内核转储目标目录必须存在, 否则服务将失败。此时kdump服务已经开启成功了,可以使用下面命令来查看是否开启成功。
systemctl status kdump.service
如果开启失败的话,会有如下输出:
会有很多的红字输出,第一个红字是表示开启失败了。在最后一行红字的上两行提示了是什么原因导致开启失败,上图开启失败是因为存储dump 文件的路径不存在。修改以后就成功了。
kdump内核的更多相关文章
- kdump内核转储
目录 CentOS 7.5 配置Kdump 安装Kdump 安装Kdump图形化 配置保留内存 配置kdump类型 核心转储到本地 核心转储到设备 使用NFS指定核心转储 使用SSH指定核心转储 配置 ...
- 使用kdump内核调试工具遇到的问题及解决
修改linux内核代码或者内核模块的时候,搞不好就会造成linux死机崩溃,crash死机后/var/log/kern.log里面不会有任何异常信息记录.这时候kdump就会派上用场了,网上kdump ...
- 手动添加kdump
背景: Linux嵌入式设备内核挂死后,无法自动重启,需要手动重启.而且如果当时没有连串口的话,就无法记录内核挂死时的堆栈,所以需要添加一种方式来记录内核挂死信息方便以后调试使用.设备中增加k ...
- Linux内核调试方法总结【转】
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...
- 【转】Linux内核调试方法总结
目录[-] 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_sta ...
- Centos7/RHEL7 开启kdump
Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核, 该内核会将此时 ...
- kdump简单的介绍
kdump是2.6.16之后,内核引入的一种新的内核崩溃现场信息收集工具.当一个内核崩溃后(我们称之为panic),内核会使用kexec(类似于进程的exec,把当前内核换掉)进入到一个干净的备份内核 ...
- CentOS 6.4中升级编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 以及Kdump配置
在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 今天在isocpp上看到"GCC 4.8.1 released, C++11 feature ...
- Linux内核调试方法总结
Linux内核调试方法总结 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 ...
随机推荐
- QNetworkAccessManager post()和get()方法
GET方式提交的数据最多只能有1024字节,而POST则没有此限制. 大文件传输用post(),小文件用get(), 第一次接触Qt的Http项目,今天看了一下Post和Get的基本使用方法,就开始尝 ...
- 使用Fiddler获取手机app数据
参考资料:https://www.jianshu.com/p/9e05a2522758 Fiddler下载地址 https://www.telerik.com/download/fiddler
- python学习笔记_week15
note 上节作业问题: 1.css重用 <style> 如果整个页面的宽度 > 900px时: { .c{ 共有 } .c1{ 独有 } } .c2{ 独有 } </styl ...
- OpenGL中摄像机矩阵的计算原理
熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄像机view矩阵的计算原理.此处假设 ...
- zookeeper超时:Unable to connect to zookeeper server within timeout: 5000
解决措施: 1:检查 提供方和消费方的address是否正确 <dubbo:application name="dubboxdemo-servive"/> <du ...
- MySQL 5.7 时间显示修改(log_timestamps UTC)
https://blog.csdn.net/leshami/article/details/78952842 在MySQL 5.7版本中,日志记录时间发生了变化,使用了UTC方式来记录日志时间,也就是 ...
- Linux FACL(文件访问控制列表)
文件有三种权限 属主权限 属组权限 其他权限 现在有这样一个场景,用户 A 想把文件共享给不是同组内用户 B ,而又不想修改其他权限,这时候 FACL 就起作用了 FACL可以给文件添加一个拓展 ...
- node.js 爬虫案例
本案例是爬的一部小说,爬取并存在本地 使用了动态浏览器头部信息,和 动态ip代理, 这2个方式可以有效的伪装自己,不至于被反爬,然后拉黑,之前已有记录,浏览器头部信息,也记录的有, app.js im ...
- C# 类库调试 启动外部程序无法调试
无法调试进程 test.exe [17936] 中的某些代码.请参阅下面的状态信息. IntelliTrace 代码失败(0x80131534). Managed (v4.6.v4.5.v4.0 ...
- java ftp主动模式与被动模式
首先介绍一下主动模式与被动模式: 1.PORT(主动模式) ftpClient.enterLocalActiveMode(); PORT中文为主动模式,工作的原理:FTP客户端连接到FTP服务器的21 ...