解決策 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 でこの問題に遭遇しました。他のプロセスについては、与えられた回答が役立つはずです。