ulimit の修正: 開いているファイル: 制限を変更できません: 操作は許可されていません

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

システム 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 はプロセスあたりです。したがって、複数のプロセスを持つことでこの制限を克服できます。

関連情報