在 Systemd 中管理 NProc

jac*_*cac 5 systemd

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

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

我们通过设置解决了问题

TasksMax=infinity
Run Code Online (Sandbox Code Playgroud)

之间有什么不同TasksMaxLimitNPROC当你应该使用一个比其他?

sou*_*edi 2

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

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

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