Systemd 停止用户管理器并终止所有用户进程

Ben*_*ida 2 systemd

我有许多 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...
Run Code Online (Sandbox Code Playgroud)

在此之前不久,CPU 使用率出现峰值,因为容器始终同时执行计划任务。

我没有更改原始版本(Ubuntu 22.04LTS)的任何 systemd 设置。并在中/etc/systemd/system.conf设置DefaultCPUAccounting为否。

我怀疑可能存在一些其他限制导致关闭(例如:任务数量),但我在日志中找不到任何有关促使用户管理器停止的信息。

如何查找停止原因?

use*_*686 6

从你的日志来看,我想说你的因果关系颠倒了:用户会话首先停止;然后,在 10 秒计时器之后,systemd-logind 将用户管理器视为“不需要”而停止(这是标准行为,除非已为该用户启用“linger”模式)。

\n

首先loginctl enable-linger <user>禁用用户服务管理器的自动GC;无论如何,每当您想要拥有“永久”用户服务时,您都应该启用该功能。(如果您记得之前启用过它,我首先查看 /var/lib/systemd/linger 来检查标志文件是否仍然存在 \xe2\x80\x93 ,某些东西可能已将其删除。)

\n

如果这有帮助,请继续尝试找出用户会话停止 \xe2\x80\x93 的原因,这取决于之前使它们保持打开状态的原因(本地控制台登录?SSH 会话?)。

\n
\n

DefaultCPUAccounting与问题无关;基于 cgroup 的 CPU 统计可能只会限制进程,但(与 ulimit 不同)不会彻底杀死它们。“Consumed xxx CPU time”消息仅供参考。

\n

  • 感谢您的所有指导。我启用了 linger,并根据以下内容将 Podman 套接字添加到 systemd:https://docs.podman.io/en/latest/markdown/podman-system-service.1.html 我发现 podman 系统服务由我登录启动并以默认的 5 秒不活动设置运行。因此,当容器发生一些繁重的事情时,podman 服务没有任何活动超过 5 秒,然后它会自行关闭。通过上述处理,即使 CPU 峰值出现,容器也能保持运行。 (3认同)
  • 是的,这不是启动用户服务的好方法。听起来好像以前您可能已经设置了 cron 来打开 PAM 会话,并且 cronjob 或多或少地意外地保持它打开...启用了 linger,如果需要,您可以将它们添加到“default.target”中开机启动。 (2认同)