システムの制限が引き上げられたにもかかわらず、デーモンのオープンファイル制限に達しました

システムの制限が引き上げられたにもかかわらず、デーモンのオープンファイル制限に達しました

私は Debian wheezy を実行しています。ファイル制限は、ユーザーごとに 100000 に増加されています。 ulimit -aまたulimit -Hn-Sn画面上でも、開いているファイルの最大制限の正しい量が表示されます。しかし、何らかの理由で、約 4000 を超える接続や開いているファイルを持つことができません。

からsysctl.conf

net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 500 65000
net.core.somaxconn = 81920

出力ulimit -a:

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

たとえば、redis:

クライアント: 100 のクライアントでベンチマーク

Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Error: Connection reset by peer

サーバー情報:

127.0.0.1:6379> info clients
-Clients
connected_clients:4005
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

ジャワ:

Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
java.io.IOException: Too many open files
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files

ls -l /proc/[id]/fd | wc -l約4000の記述子を表示

答え1

オープンファイルの数を制限する設定には、プロセスごとの制限とシステム全体の制限の2つがあります。システム全体の制限はsysctlによって設定されfs.file-max、次のように構成できます。/etc/sysctl.conf(起動時に読み込まれる)または、sysctlコマンドまたは に書き込むことによって/proc/sys/fs/file-max設定します。プロセスごとの制限は によって設定されますulimit -n

プロセスごとの制限は各プロセスに親から継承されます。デフォルト値は/etc/security/limits.confただし、これは対話型セッションにのみ適用され、起動時に起動されるデーモンには適用されません。対話型セッション経由で起動されたデーモンにのみ適用されます。

デーモンのプロセスごとの制限を増やす (または減らす) には、通常、デーモンの起動スクリプトを編集し、ulimitデーモンが起動する直前に の呼び出しを追加します。Debian redis パッケージには、別のファイルで構成設定が付属しています: /etc/default/redis。必要に応じて行をコメントアウトしULIMIT=、値を増やします。

関連情報