Acabei de perceber que meu sistema não está limitando a quantidade de processos por usuário corretamente, não impedindo que um usuário faça uma fork-pump e bata em todo o sistema:
user@thebe:~$ cat /etc/security/limits.conf | grep user
user hard nproc 512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.
Isso é um bug ou por que ele está ignorando o limite limits.conf
e por que não está aplicando o limite que ulimit -n
afirma ser?
PS: Eu realmente não acho que o limite de memória seja atingido antes do limite do processo. Esta máquina possui 8 GB de RAM e estava usando apenas 4% dela no momento em que eu joguei o garfo.
EDITAR:
Consegui reproduzir isso em um CD ao vivo. Então eu acho que isso deve ser um bug. Basicamente, acaba matando todos os processos, incluindo coisas críticas do sistema como X11, SSHD etc.
Qualquer usuário pode travar o sistema.
user@thebe:~$ ulimit -u
1024
ulimit -u
, recebo 31325. Quando corro, ulimit -u 512
ele fica 512. Quando corro a bifurcação, o resto do meu sistema está bem.
ulimit -u