GNU/Linux >> Linux の 問題 >  >> Linux

Debian で開いているファイルが多すぎる

解決策 1:

プロセスがスクリプトを介して開始される場合、デーモンを実行する直前に、スクリプト内で ulimit への呼び出しを配置できます。

ユーザーまたはすべてのユーザーの ulimit を増やしたい場合は、pam_limits を介して適用される制限を設定できます。 ログイン時。これらは /etc/security/limits.conf で設定されます .あなたの場合、次のようなことができます:

*               hard    nofile             2048

「ハード」とはハード リミットを意味することに注意してください。これは超えることも、変更することもできません。ソフト リミットはユーザー (root 権限を持たないユーザーなど) が変更できますが、ハード リミットを超えることはできません。

limits.conf を読む pam_limits の使用に関する詳細情報 .

解決策 2:

カーネルで設定されているオープン ファイルの「合計最大」もあります。現在の設定は次の方法で確認できます。

cat /proc/sys/fs/file-max 

新しい値を次のように設定します:

echo "104854" > /proc/sys/fs/file-max

再起動後も設定を維持したい場合は、

を追加してください
sys.fs.file-max=104854

/etc/sysctl.conf

現在の最大ファイル使用量を確認するには:

[[email protected] proc]# cat /proc/sys/fs/file-nr
3391    969     52427
|        |       |
|        |       |
|        |       maximum open file descriptors
|        total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)

解決策 3:

他の人が言っているように、/etc/security/limits.conf でユーザーまたはグループごとに特定の制限を適用できます。

注:ulimit -n はソフト制限を示します。

ulimit -H -n 

ハードリミットが表示されます。

これにより、ulimit -a と ulimit -n の出力が非常に混乱します。たとえば、ファイル数を 1024 から 4096 に増やした場合、ハード リミットの出力が表示されるはずなのに、まだ 1024 が表示されており、これがソフト リミットです。

また、これらの制限はログインごとに適用されるため、新しいシェルで再ログインして変更を確認してください。変更が既存のログインに反映されるとは思わないでください。

解決策 4:

start-stop-daemon でプロセスを実行すると、/etc/security/limits.conf で ulimits を設定しても機能しないことに注意してください。たとえば、Tomcat のオープン ファイル制限を 20000 に上げたい場合は、これらを /etc/default/tomcat の行に追加する必要があります :

ulimit -Hn 32768
ulimit -Sn 32768

debian 6.0.4 でこの問題に遭遇しました。他のプロセスについては、与えられた回答が役立つはずです。


Linux
  1. udev の起動:udevd inotify_init に失敗しました:開いているファイルが多すぎます

  2. 開いているファイルが多すぎるとプッシュ/フェッチでgitが失敗するのはなぜですか

  3. プロセスごとに開いているファイルをカウントする

  1. nginx最大オープンファイルを設定するには?

  2. Debian - 何千ものファイルを削除する

  3. s3cmd が何度も失敗する

  1. Mysqlエラーの解決:開いているファイルが多すぎます

  2. Ubuntuでオープンファイルの制限を増やす方法は?

  3. 開いているファイルが多すぎます (CentOS7) - より高い制限を設定しようとしました