Tôi đã thử nghiệm điều này trên các bản cài đặt GNU / Linux khác nhau:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
Hệ thống A và D
Giới hạn đầu tiên tôi đạt được là 1024. Nó có thể dễ dàng tăng lên bằng cách đưa nó vào /etc/security/limits.conf:
* hard nofile 1048576
và sau đó chạy:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Bây giờ bài kiểm tra đi đến 1048576.
Tuy nhiên, có vẻ như tôi không thể nâng nó lên trên 1048576. Nếu tôi đặt 1048577 trong giới hạn. Nó chỉ đơn giản là bị bỏ qua.
Điều gì gây ra điều đó?
Hệ thống B
Trên hệ thống BI thậm chí không thể đến 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
/etc/security/limits.conf:
* hard nofile 1048576
Ở đây tôi nhận được:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK
Giới hạn đó đến từ đâu?
Hệ thống C
Hệ thống này cũng có giới hạn 1048576 trong giới hạn.conf và 99999999 trong / Proc / sys / fs / file-max.
Nhưng ở đây giới hạn là 4096:
$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK
Làm cách nào để nâng mức đó lên (ít nhất) 1048576?
(Lưu ý với bản thân: Đừng làm echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max
:)