2026/3/26 11:53:57
网站建设
项目流程
站长网站,动漫制作技术是干什么的,建设三合一网站,wordpress 获取头像大家好#xff0c;我是bug菌~
在Linux内核中#xff0c;Softlockup和Hung task都是任务调度异常的情况#xff0c;但它们的检测机制、触发条件和关注点有所不同#xff1a;
Softlockup#xff08;软锁死#xff09;
定义指某个CPU核心上的内核任务长时间占用CPU而不调度…大家好我是bug菌~在Linux内核中Softlockup和Hung task都是任务调度异常的情况但它们的检测机制、触发条件和关注点有所不同Softlockup软锁死定义· 指某个CPU核心上的内核任务长时间占用CPU而不调度导致该CPU上的调度器无法运行其他任务· 核心是任务正在运行但长时间不释放CPU检测机制· 由NMI watchdog不可屏蔽中断看门狗检测· 每个CPU核心都有一个watchdog线程定期唤醒并检查时间戳· 如果某个CPU上的任务运行时间超过阈值通常20秒且watchdog线程无法运行则触发softlockup常见原因· 内核代码中的无限循环或长时间循环· 抢占被禁用时间过长· 中断处理程序执行时间过长· 内核bug导致的死循环典型表现BUG: soft lockup - CPU#1 stuck for 23s! [bash:1234]Hung task任务挂起定义· 指用户空间任务在D状态不可中断睡眠停留时间过长· 核心是任务在等待某些资源但永远得不到检测机制· 由内核的hung task检测器khungtaskd内核线程定期扫描· 检查所有任务的D状态持续时间· 默认阈值通常为120秒常见原因· 等待永远不会发生的I/O操作如故障的磁盘· 内核驱动bug导致资源永远不可用· 死锁或资源竞争· 网络文件系统超时典型表现INFO: task bash:1234 blocked for more than 120 seconds主要区别对比维度 Softlockup Hung Task任务状态 正在运行R状态 不可中断睡眠D状态检测对象 CPU核心使用情况 单个任务的调度状态检测机制 NMI watchdog定时器 khungtaskd线程扫描触发条件 CPU被独占超过阈值 D状态持续时间过长默认阈值 通常20秒 通常120秒关注焦点 CPU调度问题 I/O/资源等待问题常见根源 内核bug、死循环 硬件故障、驱动bug、死锁调试与处理Softlockup调试# 查看配置cat/proc/sys/kernel/watchdog_thresh# 调整阈值秒echo30/proc/sys/kernel/watchdog_thresh# 获取堆栈信息echol/proc/sysrq-triggerdmesg|tail-50Hung task调试# 查看配置cat/proc/sys/kernel/hung_task_timeout_secscat/proc/sys/kernel/hung_task_panic# 强制结束挂起任务echof/proc/sysrq-trigger# 触发OOM killer实际场景示例· Softlockup内核模块中的while(1)循环没有cond_resched()· Hung taskNFS服务器宕机后客户端进程在mount点上等待响应总结· Softlockup是活锁——任务在运行但独占CPU· Hung task是死等——任务在等待永远不会到来的资源两者都表示系统出现异常但诊断时需要区分问题的性质是CPU调度问题还是资源等待问题。实际工作中softlockup通常更紧急因为它直接影响CPU的可用性。