Przetestowałem to na różnych instalacjach GNU / Linux:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
System A i D.
Pierwszy limit, który osiągnąłem to 1024. Można go łatwo podnieść, umieszczając to w /etc/security/limits.conf:
* hard nofile 1048576
a następnie uruchom:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Teraz test przechodzi do 1048576.
Wydaje się jednak, że nie mogę go podnieść powyżej 1048576. Jeśli ustawię 1048577 w limit.conf, zostanie to po prostu zignorowane.
Co to powoduje?
System B
W systemie BI nie można nawet dostać się do 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
/etc/security/limits.conf:
* hard nofile 1048576
Tutaj otrzymuję:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK
Skąd ten limit?
System C.
Ten system ma również limit 1048576 w limit.conf i 99999999 w / proc / sys / fs / file-max.
Ale tutaj limit wynosi 4096:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK
Jak podnieść to do (przynajmniej) 1048576?
(Uwaga do siebie: Nie rób echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max
:)
linux
limit
file-descriptors
ulimit
Ole Tange
źródło
źródło
Odpowiedzi:
Sprawdź, czy
/etc/ssh/sshd_config
zawiera:i który
/etc/pam.d/sshd
zawiera:Nadal nie ma odpowiedzi na pytanie, dlaczego 1048576 ma maks.
1048576 wydaje się być na proces. Dzięki wielu procesom limit ten można pokonać.
źródło