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

テスト回数は現在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はプロセスごとです。したがって、これらの制限は複数のプロセスを通じて克服することができます。

おすすめ記事