私はこれをさまざまな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
テスト回数は現在1,048,576回に達しました。
しかし、1048576以上に上げることはできないようです。 Limit.confに1048577を入れると無視されます。
原因は何ですか?
システム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;
1048576はプロセスごとです。したがって、これらの制限は複数のプロセスを通じて克服することができます。