文章目录
- 概述
- Hung Task配置
- Hung Task机制初始化
- Hung Task监测线程
- 相关参考
概述
Hung Task机制周期性地监测系统中处于TASK_UNINTERRUPTIBLE状态(即D状态)的进程,如果超过120s(时间可配),进程状态还没有进行切换,khungtaskd就会打印提示信息。
Hung Task配置
Hung Task机制支持通过proc文件系统进行配置,包括监测周期、超时时间以及是否触发panic等,相关配置文件位于/proc/sys/kernel/目录下,包括
- hung_task_all_cpu_backtrace:设置1,则内核给所有CPU发送NMI中断,打印堆栈;
- hung_task_check_count:配置支持检测线程的数量;
- hung_task_check_interval_secs:配置检测周期;
- hung_task_panic:配置为1,则检测到Hung任务时,触发Panic;
- hung_task_timeout_secs:配置任务Hung超时事件,默认时120时;
- hung_task_warnings:配置告警次数。
Hung Task机制初始化
Hung Task机制通过subsys_intcall配置初始化,入口为hung_task_init,hung_task_init只做了两个事情:
- 注册panic_notifier_list通知链事件,监听panic事件通知;
- 启动khungtaskd内核线程,由khungtaskd完成实际的监测任务。
Hung Task监测线程
Hung Task机制会创建一个名为khungtaskd
的内核线程,周期性扫描系统中所有的线程,当发现有线程处于TASK_UNINTERRUPTIBLE状态超过一定的时间(通常为120s),则打印告警。
相关参考
- 《奔跑吧,Linux内核》
- Hungtask原理及分析