以下内容偶尔会出现在/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 取消了实时优先级。