在 Systemd 中管理 NProc

在 Systemd 中管理 NProc

SystemD“任务”和 nproc 值之间有什么不同?

我们发现服务崩溃的问题,因为当前任务的数量超过了 TasksMax 的 Systemd 默认值 (512)。然而我们已经设置LimitNPROC=infinity好了,所以我们很惊讶服务被限制在 512。

我们通过设置解决了这个问题

TasksMax=infinity

两者之间有什么区别TasksMax以及LimitNPROC何时应该使用其中一种?

答案1

LimitNProc=是 rlimit(也称为 ulimit)。 “有关资源限制概念的详细信息,请参阅 setrlimit(2)...请注意,使用这些选项配置的大多数进程资源限制都是针对每个进程的,并且进程可能会分叉以获取一组独立于进程的新资源。原始过程,因此可能逃脱设定的限制。”这记录在man systemd.exec. RLIMIT_NPROC是这句话的例外之一;它限制“真实用户 ID”(UID) 的进程数量。

TasksMax=被记录在更具体的 中man systemd.resource-control,作为“依赖 Linux 控制组 (cgroups) 内核概念来组织进程”的选项之一。所有此类限制都适用于为 systemd 服务创建的 cgroup。不能通过简单地分叉一个新进程来逃避 cgroups。

TasksMax=对我来说更有意义。我不知道你为什么要使用LimitNProc=.

相关内容