系统使用 ps aux 查看进程时,发现有状态为 I (大写i) 的进程,暂无发现由于这个状态导致的问题。

进程状态“I”,表示task_idle,即空闲的任务(进程),这个是在比较新版的内核中新增的状态,在原生的kernel中最早出现于4.14-rc3版本。

以往系统设计,使用 TASK_INTERRUPTIBLE 来使 kthreads 空闲并等待“工作”,因为 TASK_UNINTERRUPTIBLE 会导致负载增加。但让所有空闲的 kthread 都也接入负载计算,这显得不合理。
因为空闲时 kthreads 的所有信号都被屏蔽,大多数情况下这样的设计及工作机制是没有问题的。但是有一些站点会导致此问题,必须使用 TASK_UNINTERRUPTIBLE,除了 loadavg 负载计算。
所以在后面较新版本的内核中,新增了一补丁,提供了 TASK_NOLOAD ,与 TASK_UNINTERRUPTIBLE 结合使用时,避免了 loadavg 清算。在实际的使用场景中,大多数站点会存在 kthreads 想要闲置,等待工作的循环,因此也引入了TASK_IDLE。
像 ps 和 top 这些工具,因为是从 /proc 中获取到进程的状态信息,所以在更新内核之后,可以直接显示出这个新的状态。
参考链接:
https://unix.stackexchange.com/questions/462098/unrecognized-process-state-output-in-ps-command
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/comm

在新版Linux内核中,进程状态'I'表示空闲任务(task_idle)。这个状态是为了区别于原来的'TASK_INTERRUPTIBLE',避免空闲kthreads影响负载计算。旧版本中,空闲kthreads可能会被错误地计入负载,而'I'状态解决了这个问题。该状态在/proc中可见,并由ps和top等工具显示。
最低0.47元/天 解锁文章
4226

被折叠的 条评论
为什么被折叠?



