咱們知道在Linux中系統分爲內核態和用戶態,通常用戶行爲都發生在用戶態,內核自我管理。但若是內核出現錯誤崩潰了,能夠使用Kdump來分析錯誤緣由。
Kdump服務提供了內核的崩潰轉儲機制,能夠在內核崩潰時保存系統內存信息。Kdump使用kexec系統調用在崩潰時進入第二kernel抓取保存崩潰內核的內存信息,the second kernel以服務的形式佔用一部分系統內存。也就是說Kdump服務利用系統內存提供了一個臨時備用的內核得以保存內核日誌信息。linux
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
參數的地址。spa
Kdump是以服務形式管理的命令行
$ systemctl enable kdump.service
$ systemctl start kdump.service
$ systemctl enable kdump.service
$ systemctl disable kdump.service
能夠經過人工方式手動使內核崩潰debug
$ systemctl is-active kdump $ echo 1 > /proc/sys/kernel/sysrq $ echo c > /proc/sysrq-trigger $ reboot
重啓後能夠在/var/crash/目錄下看到vmcore日誌文件3d
若是Kdump正常工做成功獲取了內核的崩潰日誌,那麼下一步就是分析崩潰日誌,咱們能夠使用crash工具來查看vmcore日誌文件日誌
crash工具一個相似GDB的分析core dump的工具code
安裝crashblog
$ 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