私はDebian wheezeを実行しています。ユーザーあたりのファイル制限が100,000に増えました。
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
Java:
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=
行をコメントアウトし、必要に応じて値を増やします。