"金丝雀线程"是什么,为什么它会饥饿?

下面的内容偶尔会出现在/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.

这里发生了什么事情?

жңүе…іACPIзҡ„kern.logдёӯжҳҜеҗҰжңүд»»дҪ•й”ҷиҜҜпјҹеҰӮжһңжңүзҡ„иҜқпјҡиҝӣе…ҘBIOS并жЈҖжҹҘACPI power save optionsжҳҜеҗҰи®ҫзҪ®дёәExtendedгҖӮе°Ҷе…¶жӣҙж”№дёәNormalгҖӮ - Rinzwind
2个回答

这里所说的“canary”一词最初来自煤矿。煤矿工人使用金丝雀来检测危险气体(如果他们随身携带的金丝雀死亡,他们就知道必须尽快离开井/矿)。因此,“canary”一词现在常用于指任何用于提前警示危险情况的东西。
在这种情况下,似乎'rtkit'启动了一个“正常”的线程,以测试那些获得“实时”优先级的线程是否“饿死”了其他线程和进程,其中“饿死”意味着它们获得的处理器时间太少。这是一项安全措施,以确保具有实时优先级访问权限的进程/线程不会使用过多的CPU时间,导致其他任务无法获得任何时间。
因此,显然一些从rtkit获得实时优先级的线程正在行为不当,试图垄断CPU,rtkit通过其“canary线程”检测到这一点,因此rtkit取消了实时优先级。

这是一个缓冲区溢出。 维基百科缓冲区溢出 从您发布的日志中,我无法确定问题出在哪里,请您检查或将上述和下述消息的日志条目粘贴到pastebin上。1368号进程是什么?
sudo ps -p 1368

3这并不是关于缓冲区溢出的问题,而是关于使用词语“canary”,它也源自煤矿工人使用金丝雀。 - JanC