Debianでの実行プロセスは長いです。ある時点でエラーをスローします:
開いているファイルが多すぎます。
ランニング:
ulimit -a
ショー:
ファイルを開く(-n)1024
開いているファイルの数を2倍に増やしたい。実行後
ulimit -n 2048
制限はセッションの終了までアクティブであり、タスクには適用されません。
開いているファイルの数を永続的に増やすにはどうすればよいですか?
プロセスがスクリプトを介して開始される場合は、デーモンを実行する直前にスクリプトにulimitの呼び出しを配置できます。
ユーザーまたはすべてのユーザーのulimitを増やしたい場合は、ログイン時にpam_limits
を介して適用される制限を設定できます。これらは/etc/security/limits.conf
で設定されます。あなたの場合、あなたは次のようなことをすることができます:
* hard nofile 2048
「ハード」は、ハードリミットを示します。これを超えることはできず、変更することもできません。ソフト制限はユーザー(ルート機能のない人など)が変更できますが、ハード制限を超えることはできません。
limits.conf
の使用の詳細については、pam_limits
をご覧ください。
カーネルに設定されているオープンファイルの「合計最大」もあり、現在の設定は次のコマンドで確認できます。
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)
他の人が言ったように、/ etc/security/limits.confでユーザーまたはグループごとに特定の制限を適用できます。
注:ulimit -nはソフト制限を示します。
ulimit -H -n
ハードリミットが表示されます。
これにより、たとえば、ハード制限の出力が表示されるはずのファイル数を1024から4096に増やす場合、ulimit -aとulimit -nの出力は非常に混乱しますが、依然としてソフト1024が表示されます。制限。
また、これらの制限はログインごとに適用されるため、新しいシェルに再ログインして変更を確認し、既存のログインに反映されることを期待しないでください。
Start-stop-daemonでプロセスを実行した場合、/ etc/security/limits.confにulimitsを設定しても機能しないことに注意してください。たとえば、Tomcatのオープンファイル制限を20000に上げる場合は、これらを/etc/default/Tomcat
の行に追加する必要があります。
ulimit -Hn 32768
ulimit -Sn 32768
私はdebian 6.0.4でこの問題に遭遇しました。他のプロセスについては、与えられた答えが役立つはずです。
長期実行プロセスの開始方法によって異なります。ブート時に(/etc/rcX.d/*スクリプトを介して)開始される場合、デフォルトの制限はカーネルによって設定され、再コンパイルしないと調整できないため、起動スクリプトにulimit呼び出しを配置する必要があります。
/etc/security/limits.conf
の使用は、cron
を使用して、たとえば次のようなエントリで開始する場合に機能します。
@reboot $HOME/bin/my-program
/etc/pam.d/cronがpam_limits.soを有効にするので、それはうまくいくはずです。