Linux 内核软死锁(soft lockup)记录

本文介绍了在Linux系统中遇到的软死锁问题及其解决办法。软死锁是指某些进程或内核线程被锁定在特定状态而无法响应的情况。文章详细分析了问题产生的原因,并提供了调整内核参数的方法来防止软死锁的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景

在特定服务器资源中运行高负载程序
造成NMI watchdog: BUG: soft lockup - CPU#4 stuck for 24s

名词解释

Soft lockup名称解释:所谓,soft lockup就是说,这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题

原因分析

cpu调度器调度一个三方软件介入的驱动程序, 但是该驱动程序存在问题并且没有被监测到, 那么该驱动程序会占用该cpu很长时间导致该cpu没有被执行。linux对于该cpu的监听进程(watchdog/x)长时间监听不到该cpu的状态,监听进程就会抛出一个软死锁(soft lockup)错误,软死锁会挂起cpu使该cpu不可使用。

问题解决

vi /etc/sysctl.conf
#设定当cpu被占用,但是监听进程(watchdog/x)长达30s未监听到该cpu正在执行,则释放该cpu的所有进程。
kernel.watchdog_thresh=30

  • sysctl -p
标注

在centos6(2.6内核)中:
softlockup_thresh的值等于内核参kernel.watchdog_thresh,默认60秒;

在centos7(3.10内核)中:
内核参数kernel.watchdog_thresh名称未变,但含义变成了hard lockup threshold,默认10秒;
soft lockup threshold则等于(2*kernel.watchdog_thresh),默认20秒;
3.10内核中 高精度计时器(hrtimer),也就是kernel/watchdog.c: watchdog_timer_fn() 的周期是:softlockup_thresh/5 ,默认4s
如果超过了soft lockup threshold(20s)未更新, 那么就会发生soft lockup。

### Linux Soft Lockup 原因 Soft lockup 是指某些进程或内核线程被卡在特定状态下无法继续执行,尽管系统其他部分仍能正常运作[^1]。这种状况通常是由于以下几个原因之一: - **内核锁争用**:当多个进程试图获取同一个资源上的互斥锁时可能发生死锁情况。 - **无限循环**:如果程序陷入了一个不会退出的循环中,并且该循环不包含任何可打断点,则可能导致处理器持续占用而不响应外部请求。 - **硬件故障**:偶尔也会因为底层硬件层面的问题引起此错误。 具体来说,在Linux环境中遇到 `BUG: soft lockup` 错误提示意味着某颗CPU核心已经停止响应超过一定时间长度(默认为20秒),这期间它既没有处理新的任务也没有完成当前正在做的工作[^2]。 ### 解决方案概述 针对上述提到的各种可能成因,可以采取如下措施来预防和修复soft lockup问题: #### 调试与诊断工具的应用 利用诸如 perf、ftrace 或者 SystemTap 这样的性能分析工具可以帮助定位哪些函数调用路径消耗了大量的CPU周期而未能及时返回控制权给调度器[^3]。 ```bash perf record -g sleep 60; perf report ``` 这段命令会收集一分钟内的采样数据并生成报告用于后续审查。 #### 修改内核参数配置 调整一些关键性的内核参数有助于缓解由竞争条件引发的竞争态异常行为。例如增加最大允许等待的时间间隔(`watchdog_thresh`)可以让系统有更多机会自行恢复而不是立即触发警报;设置更激进的任务迁移策略能够减少跨NUMA节点间通信延迟带来的负面影响等。 ```bash echo "10" > /proc/sys/kernel/watchdog_thresh ``` 通过修改 `/etc/sysctl.conf` 文件中的相应条目实现永久生效。 #### 更新驱动程序版本 对于那些怀疑是由设备驱动缺陷所造成的案例而言,尝试升级到最新稳定版往往可以获得更好的兼容性和稳定性表现。特别是涉及到网络接口控制器(Network Interface Controller, NIC)以及存储子系统的组件时更是如此。 #### 定期维护检查 定期重启服务端机器以清除累积下来的临时文件缓存和其他潜在隐患同样重要。此外还需关注官方安全公告列表里是否有针对性补丁发布可供应用。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值