在Linux系统中,当内核崩溃时,系统会生成一个core dump文件,这个文件包含了导致内核崩溃的详细信息,对于开发者来说,这是一个非常重要的调试工具,有时候系统可能并没有自动生成core dump文件,或者生成的文件位置并不在我们期望的地方,我们可以使用pstore(Process Store)来帮助我们自动“抓捕”内核崩溃日志。
pstore是Linux内核提供的一种机制,它可以在系统内存中保存进程的运行时信息,当进程因为某些原因崩溃时,这些信息就会被写入到pstore中,我们可以通过读取pstore中的信息,来获取到导致进程崩溃的原因。
我们就来看一下如何使用pstore来自动“抓捕”内核崩溃日志。
我们需要在系统启动时开启pstore的支持,这可以通过在/etc/default/grub文件中添加以下两行配置来实现:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pstore=memory" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto pstore=memory"
我们需要重启系统以使配置生效。
接下来,我们需要安装pstore相关的工具,这可以通过以下命令来实现:
yum install -y e2fsprogs-devel elfutils-libelf-devel kmod-kvm-intel libstdc++-devel zlib-devel
我们可以编译并安装pstore模块:
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
我们需要创建一个脚本来定期检查pstore中的信息,这个脚本可以如下所示:
#!/bin/bash while true; do # 检查是否有新的core文件被写入到pstore中 if [ -e /sys/fs/pstore/coredump ]; then # 读取最新的core文件的内容 last_core=$(ls -t /sys/fs/pstore/coredump | head -n 1) echo "Found new core file: $last_core" # 将core文件的内容输出到文件中 cp /sys/fs/pstore/coredump/$last_core core.txt # 删除已经处理过的core文件 rm /sys/fs/pstore/coredump/$last_core fi # 每隔一段时间检查一次 sleep 60 done
这个脚本会每隔一分钟检查一次pstore中是否有新的core文件被写入,如果有,它就会将这个文件的内容复制到一个名为core.txt的文件中,我们就可以通过查看这个文件来获取到导致内核崩溃的原因了。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/18715.html