一. 前言

前几天,帮同事一起查一个机器老是挂死无法进入问题,说有一台虚拟机时不时登陆不上挂死,同时甲方竟然没有这些主机监控,判断不了当时的cpu,内存,网络等的基础数据信息,那就只能看看内核信息了。

二 .分析

通过dmesg命令显示如下图,可以看到有soft lockup- CPU..stuck for 24s!字样,soft lockup是一种内核死锁检查的方式,类似于程序的心跳,打印这句话表示发生了内核软锁死。linux中每个cpu都设置了一个看门狗

进程,来检测内存软锁的问题,如果进程进入死锁或者进入死循环,长时间看门狗进程得不到调度,系统检测到进程占用cpu的时间超出特定的时间值后,会打印soft lockup告警,告警包含占用时长和进程名以及pid。

它的原理查了下:

在内核中启动一个优先级为MAX_RT_PRIO – 1的FIFO进程,在此进程里面会刷新时间戳。如果此时间戳超过设定的时间阈值没有更新,则会报softlockup错误。

e03b933fa2fe?linkId=98214745

image.png

三. 解决思路

通过上述信息看到发生软死锁的进程为kworker,这是系统自己的进程。

通过uname -a命令和ps -ef|grep spiderflow 命令分别查看:

查看下spiderflow监听的网卡是否为i40e类型网卡,i40e网卡驱动有可能会造成软死锁问题:

参见:https://access.redhat.com/solutions/3615651

如果是netmap驱动,如果流量不是特别大,建议用普通驱动跑下试试。

3) 设置参数信息,在发生软死锁的时候自动重启

即:

echo 1 > /proc/sys/kernel/softlockup_panic

也可以直接修改启动参数:

如下参数也都可以在/etc/default/grub修改GRUB_CMDLINE_LINUX行添加

kernel.sysrq=1

kernel.unknown_nmi_panic=1

kernel.softlockup_panic=1

这样在重启的时候不需要重新设置。

为了打印内核的core信息,需要安装kdump且启动程序

yum install kexec-tools -y

systemctl start kdump

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐