211

アプリケーションを実行すると、時々エラーが発生しますtoo many files open

制限が 1024 であるというレポートを実行ulimit -aしています。制限を 1024 より大きくするにはどうすればよいですか?

ulimit -n 2048権限エラーで結果を編集します。

4

4 に答える 4

160

いつでもやってみることができます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 種類があります。

  • ソフト制限は、単に現在適用されている制限です
  • ハードリミットは、ソフトリミットを設定しても超えられない最大値を示します

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

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

于 2008-08-29T16:30:04.443 に答える
38

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

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

于 2011-11-27T11:39:01.863 に答える
7

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

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

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

于 2012-03-01T18:38:03.340 に答える