web-dev-qa-db-ja.com

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

Debianでの実行プロセスは長いです。ある時点でエラーをスローします:

開いているファイルが多すぎます。

ランニング:

ulimit -a

ショー:

ファイルを開く(-n)1024

開いているファイルの数を2倍に増やしたい。実行後

ulimit -n 2048

制限はセッションの終了までアクティブであり、タスクには適用されません。

開いているファイルの数を永続的に増やすにはどうすればよいですか?

15
FoxyBOA

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

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

*               hard    nofile             2048

「ハード」は、ハードリミットを示します。これを超えることはできず、変更することもできません。ソフト制限はユーザー(ルート機能のない人など)が変更できますが、ハード制限を超えることはできません。

limits.confの使用の詳細については、pam_limitsをご覧ください。

12
Daniel Lawson

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

cat /proc/sys/fs/file-max 

そして、次のように新しい値を設定します。

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

再起動しても設定を保持したい場合は、

sys.fs.file-max=104854

/etc/sysctl.conf

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

[root@srv-4 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)
13
rkthkr

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

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

ulimit -H -n 

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

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

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

4
Tom Feiner

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

ulimit -Hn 32768
ulimit -Sn 32768

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

2
Janning

長期実行プロセスの開始方法によって異なります。ブート時に(/etc/rcX.d/*スクリプトを介して)開始される場合、デフォルトの制限はカーネルによって設定され、再コンパイルしないと調整できないため、起動スクリプトにulimit呼び出しを配置する必要があります。

/etc/security/limits.confの使用は、cronを使用して、たとえば次のようなエントリで開始する場合に機能します。

@reboot $HOME/bin/my-program

/etc/pam.d/cronがpam_limits.soを有効にするので、それはうまくいくはずです。

1