web-dev-qa-db-ja.com

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を超えることはできないようです。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

12
Ole Tange

それを確認します /etc/ssh/sshd_configに含まれるもの:

UsePAM=yes

そして/etc/pam.d/sshdに含まれるもの:

session    required   pam_limits.so

1048576が最大である理由に対する答えはまだありません。

1048576はプロセスごとのようです。したがって、複数のプロセスを使用することで、この制限を克服できます。

5
Ole Tange