修復 ulimit:開啟檔案:無法修改限制:不允許操作

修復 ulimit:開啟檔案:無法修改限制:不允許操作

我在不同的 GNU/Linux 安裝上對此進行了測試:

perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'

系統A和D

我達到的第一個限制是 1024。

*                hard    nofile          1048576

然後運行:

ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max

現在測試已達到 1048576。

但是,似乎我無法將其提高到 1048576 以上。

是什麼原因造成的?

系統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:)

答案1

檢查/etc/ssh/sshd_config包含:

UsePAM=yes

其中/etc/pam.d/sshd包含:

session    required   pam_limits.so

在下面的評論中 @venimus 指出 1M 限制是硬編碼的:

核心 2.6.x 原始碼宣告 ./fs/file.c:30:int sysctl_nr_open __read_mostly = 1024*1024;這是 1048676

1048576 是每個進程。因此,透過多個進程可以克服這個限制。

相關內容