Eu testei isso em diferentes instalações do GNU / Linux:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
Sistema A e D
O primeiro limite que atingi é 1024. É facilmente aumentado colocando isso em /etc/security/limits.conf:
* hard nofile 1048576
e então execute:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Agora o teste vai para 1048576.
No entanto, parece que não posso aumentá-lo acima de 1048576. Se eu colocar 1048577 em limits.conf, ele é simplesmente ignorado.
O que está causando isso?
Sistema B
No sistema, o BI nem consegue chegar a 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
/etc/security/limits.conf:
* hard nofile 1048576
Aqui eu recebo:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK
De onde veio esse limite?
Sistema C
Este sistema também possui o limite 1048576 em limits.conf e 99999999 em / proc / sys / fs / file-max.
Mas aqui o limite é 4096:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK
Como elevo isso para (pelo menos) 1048576?
(Nota para si mesmo: não faça echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max
:)