Tot*_*tor 16 scheduling linux-kernel
我在内核日志有这样的消息:INFO: task XXX blocked for more than 120 seconds
。我想知道这在技术上意味着什么:内核在什么条件下显示有关任务的消息?
作为记录,我被阻止的任务是multipathd
,但我也对这个错误的一般含义感兴趣。
Nil*_*ils 14
如果任务被阻塞,它会等待资源再次可用。
在您的情况下,可能存在 IO 问题或磁盘区域争用。或者您的系统负载如此之高,以至于没有足够的 CPU 功率来及时完成工作。
如果 cron 尝试在非常繁忙的时间开始工作,我已经从 cron 中看到了这个错误。
基本上,如果 CPU 调度程序在给定的时间内没有切换到进程,并且该进程不符合异常条件,则会触发此日志记录。
例外情况是进程尚未切换到但不应被记录的特殊情况。我不清楚异常的条件;FWIW对代码中案例的评论是:
Also, skip vfork and any other user process that freezer should skip.
Also, when a freshly created task is scheduled once, changes
its state to TASK_UNINTERRUPTIBLE without having ever been
switched out once, it musn't be checked.
Run Code Online (Sandbox Code Playgroud)
(来自check_hung_task()
Linux hung_task.c
)
https://elixir.bootlin.com/linux/v5.12.12/source/kernel/hung_task.c#L92
至于为什么一个任务可能不会被安排很长时间,它一直处于 TASK_UNINTERRUPTABLE (' D
' state in top
),例如当阻塞等待 I/O 完成时,将是一种可能性,但我不知道其他人可能有什么。