Linux
修復ulimit:打開文件:無法修改限制:不允許操作
我在不同的 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 放在 limits.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
這個限制是從哪裡來的?
系統 C
此系統在limits.conf 中也有1048576 的限制,在/proc/sys/fs/file-max 中有99999999 的限制。
但這裡的限制是 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
:)
檢查
/etc/ssh/sshd_config
包含:UsePAM=yes
其中
/etc/pam.d/sshd
包含:session required pam_limits.so
仍然沒有答案為什麼 1048576 是最大值。
1048576 似乎是每個程序。因此,通過擁有多個程序,可以克服這個限制。