Я перевірив це на різних установках GNU / Linux:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
Система A і D
Перша межа, яку я потрапила, - 1024. Її легко підняти, ввівши це в /etc/security/limits.conf:
* hard nofile 1048576
а потім запустіть:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Тепер тест переходить до 1048576.
Однак, здається, я не можу підняти його вище 1048576. Якщо я поставив 1048577 в limit.conf, це просто ігнорується.
Що це викликає?
Система B
У системній BI навіть не може дістатися до 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
/etc/security/limits.conf:
* hard nofile 1048576
Ось я отримую:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK
Звідки взялася ця межа?
Система С
Ця система також має обмеження 1048576 у limit.conf та 99999999 в / proc / sys / fs / file-max.
Але тут обмеження становить 4096:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK
Як підняти це (принаймні) до 1048576?
(Примітка до себе: Не робіть echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max
:)