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


15

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

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

ランニング:

ulimit -a

ショー:

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

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

ulimit -n 2048

制限はセッションが終了するまで有効です。これはタスクには適用されません。

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

回答:


12

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

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

*               hard    nofile             2048

「ハード」はハード制限を意味することに注意してください-これは超えられず、変更できません。ソフト制限は、ユーザー(ルート機能を持たない人など)によって変更できますが、ハード制限を超えてはなりません。

limits.conf使用に関する詳細については、をお読みくださいpam_limits


confの制限では、2行あります:* soft nofile 4096 * hard nofile 8192効果はありません。
FoxyBOA 2009年

そして、これらをテストしてからログアウトして再度ログインしましたか?これは、ローカルマシンでこれを試行している場合、X / GNOME / KDEなどから直接ログアウトすることを意味します
ダニエルローソン

はい。/etc/security/limits.confは機能しません。2番目のアプローチを試みます。
FoxyBOA 2009年

3
/etc/security/limits.confは、pamおよびpamモジュールpam_limitsを使用するサービスでのみ機能します(各サービスのPAM構成および特に/etc/pam.d/common-*については/etc/pam.d/を参照) 。したがって、...などのsshd、GDM、ログイン、によって作成されたすべてのユーザーのセッションがそれはブート時に起動するすべてのプログラムには関係しない懸念
ラファエルHertzogさん

私はその効果について何か言いましたが、それを明確にしてくれてありがとう。OPは、ユーザーが実行しているサービスまたはプロセスであるかどうかを明確にしていません。
ダニエルローソン

13

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

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)


私はここでいくつかのわいせつな数字を示しています49152 0 18446744073709551615 。最初の2つの列が3番目の列に加算されない理由がわかりません。そしてもし私が利用可能な1.8兆兆を持っているなら、私はそれらすべてをどのように使用したかわかりません。
mlissner

4

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

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

ulimit -H -n 

ハード制限が表示されます。

これにより、たとえば、ファイル数を1024から4096に増やした場合、ハードリミット出力が表示されると予想されますが、1024限定。

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


2

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

ulimit -Hn 32768
ulimit -Sn 32768

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


1

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

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

@reboot $HOME/bin/my-program

/etc/pam.d/cronがpam_limits.soを有効にするため、これは機能するはずです。


-1

これは/etc/security/limits.confに追加できます

root soft nofile 100000
root hard nofile 100000

保存して再起動します。


3
この5年前の質問に対する受け入れられた答えにない、新しいものがここにありますか?
アンドリューシュルマン14

-2

非常に良いコマンドですulimit -nが、接続数が多く、開いているファイルが多すぎるという問題があります。

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 519357
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

私はあなたの答えを整理しようとしましたが、元のポスターの質問に対してあなたが何を言おうとしているのかまだわかりません。これをさらに試してみてください。
slm

また、これはの出力でありulimit -a、ではありませんulimit -n
イヴァン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.