Ho provato questo su diverse installazioni GNU / Linux:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
Sistema A e D
Il primo limite che raggiungo è 1024. Viene facilmente aumentato inserendo questo in /etc/security/limits.conf:
* hard nofile 1048576
e quindi eseguire:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Ora il test passa a 1048576.
Tuttavia, sembra che non riesca a elevarlo al di sopra di 1048576. Se inserisco 1048577 in limits.conf, viene semplicemente ignorato.
Cosa sta causando questo?
Sistema B
Nel sistema BI non è nemmeno possibile arrivare a 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
/etc/security/limits.conf:
* hard nofile 1048576
Qui ottengo:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK
Da dove viene quel limite?
Sistema C
Questo sistema ha anche il limite 1048576 in limits.conf e 99999999 in / proc / sys / fs / file-max.
Ma qui il limite è 4096:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK
Come posso elevarlo a (almeno) 1048576?
(Nota per sé: non fare echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max
:)