さまざまな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を超えることはできないようです。limits.confに1048577を入れても、無視されます。
何が原因ですか?
システムB
システムBでは、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はプロセスごとのようです。したがって、複数のプロセスを使用することで、この制限を克服できます。