Linuxで開くことができるファイル数の制限を変更するにはどうすればよいですか?[閉まっている]


194

アプリケーションを実行すると、に関するエラーが発生することがありますtoo many files open

実行ulimit -aすると、制限が1024であると報告されます。制限を1024より大きくするにはどうすればよいですか?

編集 ulimit -n 2048すると権限エラーが発生します。


次も参照してください:unix.stackexchange.com/a/8949/231660
Guy Avraham

Centos 7(RHELでも同じ)でこれを試してみて、それをカバーするブログ投稿を作成しました。これらすべての投稿でさえも非常に問題があったためです:coding-stream-of-consciousness.com/2018/12/21/…。多くの場合、開いているファイルとともに、実際には複数の設定ファイルに存在するnprocを増やす必要があります...独自の個別の設定を持つsystemd / systemctlを使用する場合。それは一種のナッツです。
ジョンハンフリーズ-

:あなたは、Linux上でこの問題を回避するのかもしれないのヘルプVSCodeを使用している場合はstackoverflow.com/a/55027686/1190948
樹里Sinitson

回答:


153

いつでもを試すことができますulimit -n 2048。これは現在のシェルの制限をリセットするだけで、指定する数はハード制限を超えてはいけません

各オペレーティングシステムでは、構成ファイルに異なるハード制限が設定されています。たとえば、Solarisでのハードオープンファイルの制限は、/ etc / systemからの起動時に設定できます。

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

OS Xでは、これと同じデータを/etc/sysctl.confに設定する必要があります。

kern.maxfilesperproc=166384
kern.maxfiles=8192

Linuxでは、これらの設定は多くの場合/etc/security/limits.confにあります。

2種類の制限があります。

  • ソフト制限は、単に現在適用されている制限です
  • ハード制限は、ソフト制限を設定することで超えることができない最大値をマークします

ソフト制限はどのユーザーでも設定できますが、ハード制限はrootだけが変更できます。制限はプロセスのプロパティです。これらは子プロセスの作成時に継承されるため、システム全体の制限は、initスクリプトでのシステム初期化中に設定する必要があり、ユーザーの制限は、たとえばpam_limitsを使用してユーザーログイン中に設定する必要があります。

多くの場合、マシンの起動時にデフォルトが設定されています。したがって、個々のシェルでulimitをリセットしても、再起動時に以前の値にリセットされることがあります。デフォルトを変更する場合は、存在するulimitコマンドのブートスクリプトをgrepすることをお勧めします。


4
これをWindowsで使用する方法を教えてください。
Pritam 2015

@hoyhoy私はそれを変更できます2048が、4500理由は変更できませんか?これを参照してください
alhelal '28

@GaneshKrishnanあなたが言及したLinuxファイルに何を追加するのですか?
アバイラルサンジェイ18

@Pritam Windowsには何もありませんulimit。使用しているものを指定する必要があります(WSL、Cygwinなど)。
Melebius

99

Linuxを使用していて、権限エラーが発生した場合は、/etc/limits.confor /etc/security/limits.confファイルで許可されている制限を引き上げる必要があります(ファイルが配置される場所は、特定のLinuxディストリビューションによって異なります)。

たとえば、マシン上の誰でも自分の開いているファイルの数を最大10000まで増やすことができるようにするには、limits.confファイルに行を追加します。

* hard nofile 10000

次に、ログアウトしてシステムに再ログインすると、次のことができるはずです。

ulimit -n 10000

許可エラーなし。


6
注:ワイルドカードrootユーザーに適用されません。制限root hard nofile 10000を調整するかどうかを指定する必要がありますroot
Joshua Pinter

1
@JoshPinterハハ、私は過去3時間かそこらを変更する方法についてのすべての単一のチュートリアルを経てulimit、ついに私がrootとしてログインしていることがわかりました。だから私は1024を見続けてきましたulimit -a。ワイルドケアを変更し、*内部を追加しましたlimits.conf。すべて順調です(sshキーを使用しても心配ありません:P)-ありがとう!!!
NiCkニューマン2016

1
@NiCkNewman笑ってくれて嬉しいです!これは、プログラマー/ sysopsの人にとっては良い特性です。私も同じことをしましたが、それほど陽気ではありませんでした。それが役に立ててうれしい!:)
ジョシュア・ピンター

補足:このディレクトリに構成も見つかる場合があります:/etc/security/limits.d/
WaldemarWosiński16年

2
/etc/security/limits.confを初めて開いたところ、すべてがコメントアウトされていることに気付きました。「hard nofile」のデフォルト値は何ですか?
ka3ak

36

1)次の行を追加します /etc/security/limits.conf

webuser hard nofile 64000

次に、webuserとしてログインします

su - webuser

2)webuserの次の2つのファイルを編集します

実行して.bashrcおよび.bash_profileファイルを追加します

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3)ログアウトしてから再度ログインし、変更が正しく行われたことを確認します。

$ ulimit -a | grep open
open files                      (-n) 64000

それとそれは彼らのブーム、ブームブームです。


9
limits.confの行を「ハード」から「ソフト」に変更すると、それが新しいデフォルトになり、bashプロファイルを変更する必要がなくなります。
RishiD 2013

余分なステップを繰り返しているようです。制限を設定するだけでもプロファイルと同じですが、すべてのセッションにわたって行われます。
Eddie

6

一部のサービスがulimitsを利用している場合は、適切なコマンドをサービスのinitスクリプトに入れる方が簡単な場合があります。たとえば、Apacheがレポートしているとき

[アラート](11)リソースが一時的に使用不可:apr_thread_create:ワーカースレッドを作成できません

に入れulimit -s unlimitedてみてください/etc/init.d/httpd。これにはサーバーの再起動は必要ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.