我们知道在Linux中系统分为内核态和用户态,一般用户行为都发生在用户态,内核自我管理。但如果内核出现错误崩溃了,可以使用Kdump来分析错误原因。
Kdump服务提供了内核的崩溃转储机制,可以在内核崩溃时保存系统内存信息。Kdump使用kexec系统调用在崩溃时进入第二kernel抓取保存崩溃内核的内存信息,the second kernel以服务的形式占用一部分系统内存。也就是说Kdump服务利用系统内存提供了一个临时备用的内核得以保存内核日志信息。
安装Kdump
Kdump服务由kexec-tools包提供,安装命令为
$ rpm -q kexec-tools
$ yum install kexec-tools
注意,内核崩溃转储机制需要内核命令行参数设置崩溃转储,必须在引导“第一内核”期间为捕获内核保留 crashkernel 的内存。需要在/etc/default/grub配置中设置crashkernel=256M。
当内核崩溃时,崩溃日志core dump可以保存在文件,远程设备,或者网络设备中,如果不设置一般保存在/var/crash/
目录中,如果要修改保存位置,可以修改/etc/kdump.conf
配置文件中 patch
参数的地址。
Kdump服务管理
Kdump是以服务形式管理的
- 启用kdump
$ systemctl enable kdump.service
- 启动kdump
$ systemctl start kdump.service
- 停止kdump
$ systemctl enable kdump.service
- 禁用kdump
$ systemctl disable kdump.service
强制内核崩溃
可以通过人工方式手动使内核崩溃
$ systemctl is-active kdump
$ echo 1 > /proc/sys/kernel/sysrq
$ echo c > /proc/sysrq-trigger
$ reboot
重启后可以在/var/crash/目录下看到vmcore日志文件
crash工具
如果Kdump正常工作成功获取了内核的崩溃日志,那么下一步就是分析崩溃日志,我们可以使用crash工具来查看vmcore日志文件
crash工具一个类似GDB的分析core dump的工具
安装crash
$ yum install crash
$ yum install kernel-debuginfo
使用crash分析日志
$ crash /usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux /var/crash/127.0.0.120190-03-01-11:06:33/vmcore
我们可以看到crash命令第一个参数是当前系统的debug-info,第二个参数时vmcore文件
执行crash命令后会进入crash工具的CLI
可以输入更多命令操作
# display messages buffer
$ crash> log
# display kernel backtrace
$ crash> bt
# display process status
$ crash> ps
# display virtual memory
$ crash> vm
# display open files
$ crash> files
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。