J'ai testé cela sur différentes installations GNU / Linux:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
Système A et D
La première limite que j'ai atteinte est 1024. Elle est facilement augmentée en la mettant dans /etc/security/limits.conf:
* hard nofile 1048576
puis exécutez:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Maintenant, le test passe à 1048576.
Cependant, il semble que je ne puisse pas l'augmenter au-dessus de 1048576. Si je mets 1048577 dans limits.conf, il est simplement ignoré.
Qu'est-ce qui cause ça?
Système B
Sur le système BI, vous ne pouvez même pas accéder à 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
/etc/security/limits.conf:
* hard nofile 1048576
Ici, je reçois:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK
D'où vient cette limite?
Système C
Ce système a également la limite 1048576 dans limits.conf et 99999999 dans / proc / sys / fs / file-max.
Mais ici, la limite est de 4096:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK
Comment puis-je augmenter cela à (au moins) 1048576?
(Note à moi: Ne pas faire: echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max
)