Tanto quanto eu estou preocupado, acho cgroups
seria um exagero aqui. No entanto, tenho a tendência de usar ulimit
sempre que executo algo com uma chamada de sistema fork
(experiências ruins tornaram isso um hábito ...):
$ ulimit -u 2500
$ ./mypotentiallydeadlyprogram
Desta forma, eu coloquei um limite de 2.500 processos no meu shell atual. Graças a isso, minhas chamadas fork
acabarão fracassando se ficarem muito numerosas, evitando assim que o sistema caia, e permitindo que eu atinja furiosamente Ctrl + C .
Na minha máquina, acho que o 2500 é um bom limite, mas você pode querer aumentar / diminuir esse valor de acordo com o que sua máquina pode levar, e até onde você quer que sua fork fork vá. Lembre-se também de que sua máquina precisa gerar coisas para sobreviver, não as sufoque. Eu vi pessoas escrevendo isso em ~/.bashrc
, restringindo, assim, até mesmo o bash principal de sua sessão. Enquanto isso foi muito engraçado para o administrador de sistema, o usuário ficou muito infeliz em congelar após o login.
Embora ulimit
possa ser usado para configurar um limite temporário, você pode definir algo mais permanente se tiver acesso raiz (e quiser impor o limite a usuários específicos). Isso pode ser feito através de /etc/security/limits.conf
:
# <domain> <type> <item> <value>
youruser soft nproc 2500
youruser hard nproc 2750
Na configuração acima, youruser
tem um limite flexível de 2500 processos (máx. 2750). Este arquivo permite que você configure vários tipos de limites, para várias entidades em seu sistema (usuários, grupos, ...). Dê uma olhada em sua documentação se precisar de mais informações . No entanto, observe que essa é uma configuração de todo o sistema, o que significa que esse limite não é aplicado por-shell para youruser
.
A propósito, /proc/sys/kernel/pid_max
conterá o PID máximo que pode ser concedido pelo seu kernel. Como os PIDs são reutilizáveis, você pode considerar isso muito próximo do seu número máximo de processos .