和上一篇[程序员] glibc行为改变:32位程序malloc相关;差不太多,也是在升级RHEL9之后看到的行为改变。这次的主角内核,是在kernel里行为有改变。原来在RHEL8的时候,启动cmdline里有一个参数是"crashkernel=auto", 现在这个auto值不认识了,出现的错误是:Feb 3 07:48:42 -a kernel: crashkernel: memory value expected
这里是说期望一个值,而不能是一个字符串。然后查看了一下新的kdump.rst相关文档,发现没有这个auto的选项了。为什么看到这个问题呢?是因为内核crash了,但是没有产生vmcore。结果发现kdump服务没有起来!<-a:root>/root:# cat /sys/kernel/kexec_crash_size0
如果这个配置是0的话,会导致kdump服务起不来,接着就是内核发生crash的时候,抓不到vmcore文件。影响crash问题分析。get_reserved_mem_size(){ local reserved_mem_size=0 if is_fadump_capable; then reserved_mem_size=$(< /sys/kernel/fadump/mem_reserved) else reserved_mem_size=$(< /sys/kernel/kexec_crash_size) fi echo "$reserved_mem_size"}
然后尝试修改crashkernel=256M@0,重启虚拟机,就好了,可以正常产生vmcore了。<-a:root>/root:# cat /sys/kernel/kexec_crash_size268435456
这个行为改变的历史,应该好找,根据linux内核的git log查看kdump.rst的修改历史。前提是你得连的上github。如果clone的时候,突然卡掉,就需要重新再来一次了。这个项目还是很大的。$ git clone https://github.com/torvalds/linux.gitCloning into 'linux'...remote: Enumerating objects: 11281909, done.remote: Counting objects: 100% (37/37), done.remote: Compressing objects: 100% (22/22), done.error: RPC failed; curl 56 OpenSSL SSL_read: Connection was reset, errno 10054error: 783 bytes of body are still expectedfetch-pack: unexpected disconnect while reading sideband packetfatal: early EOFfatal: fetch-pack: invalid index-pack output
所以解决了这一个问题,就是下一个问题:为什么内核vmcore?