Qual é a diferença entre os valores SystemD "Tasks" e nproc?
Estávamos vendo um problema em que um serviço estava travando porque o número de tarefas atuais excedeu o valor Systemd Default para TasksMax (512). No entanto, já tínhamos definido LimitNPROC=infinity
, então ficamos surpresos que o serviço foi estrangulado em 512.
Resolvemos o problema configurando
TasksMax=infinity
Qual é a diferença entre TasksMax
e LimitNPROC
e quando você deve usar um sobre o outro?
LimitNProc=
é um rlimit (também conhecido como ulimit). "Consulte setrlimit(2) para obter detalhes sobre o conceito de limite de recursos... Observe que a maioria dos limites de recursos de processo configurados com essas opções são por processo, e os processos podem se bifurcar para adquirir um novo conjunto de recursos que são contabilizados independentemente do processo original, podendo assim escapar dos limites estabelecidos”. Isso está documentado emman systemd.exec
.RLIMIT_NPROC
é uma das exceções a esta citação; limita o número de processos "para o ID de usuário real" (UID).TasksMax=
está documentado no , mais específicoman systemd.resource-control
, como uma das opções que "depende do conceito do kernel Linux Control Groups (cgroups) para organizar processos". Todos esses limites se aplicam ao cgroup criado para o serviço systemd. cgroups não pode ser escapado simplesmente bifurcando um novo processo.TasksMax=
faz muito mais sentido para mim. Eu não sei nenhuma razão pela qual você usariaLimitNProc=
.