什么是“金丝雀线程”以及它为什么会处于饥饿状态?

什么是“金丝雀线程”以及它为什么会处于饥饿状态?

以下内容偶尔会出现在/var/log/syslog

rtkit-daemon[1145]: The canary thread is apparently starving. Taking action.
rtkit-daemon[1145]: Demoting known real-time threads.
rtkit-daemon[1145]: Successfully demoted thread 1431 of process 1368 (n/a).
rtkit-daemon[1145]: Successfully demoted thread 1430 of process 1368 (n/a).
rtkit-daemon[1145]: Successfully demoted thread 1368 of process 1368 (n/a).
rtkit-daemon[1145]: Demoted 3 threads.

这里发生了什么?

答案1

这里使用的“金丝雀”一词来自采煤最初。煤矿工人使用金丝雀来检测危险气体(如果他们携带的金丝雀死了,他们就知道必须尽快离开矿井)。因此,“金丝雀”一词现在经常用于指代任何用于(早期)警告危险情况的事物。

在这种情况下似乎例如,‘rtkit’ 启动一个“普通”线程来测试获得“实时”优先级的线程是否“耗尽”了其他线程(和进程),其中“耗尽”意味着它们获得的处理器时间太少。这是一种安全措施,可确保有权访问实时优先级的进程/线程不会占用太多 CPU 时间,以致其他任务不再获得任何时间。

因此显然一些从 rtkit 获取实时优先级的线程行为不当并试图独占 CPU,rtkit 使用其“金丝雀线程”检测到这种情况,因此 rtkit 取消了实时优先级。

答案2

这是一个缓冲区溢出

维基百科缓冲区溢出金丝雀

我无法从您发布的日志中判断问题出在哪里,您可以检查或粘贴这些消息上方和下方的日志条目吗?进程 1368 是什么?

sudo ps -p 1368

相关内容