我有许多 podman 容器在一个用户下运行。其中运行的进程有时是资源密集型的(CPU 和内存)。
直到最近我们还没有遇到任何问题。但是,在对容器内运行的程序之一进行不可避免的软件更新之后,容器每天都会同时死亡。我将可用内存增加了一倍,这暂时有所帮助,但问题又回来了。
我在 中发现以下几行/var/log/syslog
,总是在关闭之前出现:
Jul 24 17:01:26 xxx1 systemd[1]: session-5.scope: Deactivated successfully.
Jul 24 17:01:26 xxx1 systemd[1]: session-5.scope: Consumed 9.924s CPU time.
Jul 24 17:01:36 xxx1 systemd[1]: Stopping User Manager for UID 1000...
在此之前不久,CPU 使用率出现峰值,因为容器始终同时执行计划任务。
我没有更改原始版本(Ubuntu 22.04LTS)的任何 systemd 设置。并在中/etc/systemd/system.conf
设置DefaultCPUAccounting
为否。
我怀疑可能存在一些其他限制导致关闭(例如:任务数量),但我在日志中找不到任何有关促使用户管理器停止的信息。
如何查找停止原因?
从你的日志来看,我想说你的因果关系颠倒了:用户会话首先停止;然后,在 10 秒计时器之后,systemd-logind 将用户管理器视为“不需要”而停止(这是标准行为,除非已为该用户启用“linger”模式)。
首先
loginctl enable-linger <user>
禁用用户服务管理器的自动GC;无论如何,每当您想要拥有“永久”用户服务时,您都应该启用该功能。(如果您还记得之前启用过它,我会首先查看 /var/lib/systemd/linger 来检查标志文件是否仍然存在 - 有些东西可能已将其删除。)如果这有帮助,请继续尝试找出用户会话停止的原因 - 这取决于之前使它们保持打开状态的原因(本地控制台登录?SSH 会话?)。
DefaultCPUAccounting
与问题无关;基于 cgroup 的 CPU 统计可能只会限制进程,但(与 ulimit 不同)不会彻底杀死它们。“Consumed xxx CPU time”消息仅供参考。