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=
.