Linux 上的“INFO:任务 XXX 阻塞超过 120 秒”到底是什么意思?

Linux 上的“INFO:任务 XXX 阻塞超过 120 秒”到底是什么意思?

我的内核日志中有这条消息INFO: task XXX blocked for more than 120 seconds:我想知道这在技术上意味着什么:在什么条件下内核会显示有关任务的消息?

根据记录,我被阻止的任务是multipathd,但我也对这个错误的一般含义感兴趣。

答案1

如果任务被阻塞,它会等待资源再次可用。

在您的情况下,可能存在 IO 问题或磁盘区域争用。或者您的系统负载太高,以至于没有足够的 CPU 能力来及时完成作业。

我在 cron 中看到了这个错误,如果它试图在非常繁忙的时间启动一项作业。

答案2

基本上,如果 CPU 调度程序在给定时间内没有切换到该进程,并且该进程不符合异常条件,则会触发此日志记录。

异常是特殊情况,即尚未切换到某个进程,但不应记录该进程。我不清楚异常的条件;代码中对这些情况的注释如下:

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.

(来自check_hung_task()Linux hung_task.chttps://elixir.bootlin.com/linux/v5.12.12/source/kernel/hung_task.c#L92

至于为什么一个任务可能不会在很长一段时间内被调度,它连续处于 TASK_UNINTERRUPTABLE (' D' 状态top),例如当阻塞等待 I/O 完成时,将是一种可能,但我不认为知道其他人可能还有什么。

相关内容