Too many open files
nginx (/etc/nginx/nginx.conf)
# CPU と同じ数 worker_processes 8; # worker_connections の 4倍程度 # failed (24: Too many open files) に対処できる。 worker_rlimit_nofile 40960; events { # とりあえずこの値 worker_connections 10240; }
open file が増えているかを確認
# これでpid を確認し、 $ ps ax | grep nginx | grep worker # 数字に、pid を入れる。 $ cat /proc/5618/limits
Resource temporarily unavailable
net.core.somaxconn (/etc/sysctl.conf)
こちらも処理するキューに貯められる最大値。backlog と小さいほうが優先される。
# デフォルトは 1024。とりあえずこの値にする。 # failed (11: Resource temporarily unavailable) に対処できる。 net.core.somaxconn = 65535
再読み込み
sysctl -p
MySQLでtoo many connections
Rails (unicorn.rb)
worker が1増えると、db への connection が1増えるため、max_connection の値には注意する。
DBのpool は、DBの接続数にあまり意味が無い。
DB の connection 数を確認する
worker にアクセスがなければ、unicorn が起動していても connection が増えない場合もあるので注意する。
show status like 'Threads_connected';
DB の max_connection 数を確認する
この値を超えてしまった場合は、DBへ接続できないということになる。ただし、単純にDBのmax_connection を増やしてしまうと、DB 側のメモリ消費が増えてしまう。
show variables like 'max_connections';
# メモリを最大限消費する数にする。多すぎると、swapが発生し、遅すぎて処理ができなくなる。実際にworker へアクセスされた時にメモリ消費が増えるため、起動した時の値だけで判断してはいけない。 # failed (110: Connection timed out) に対処するための一つの要素。 worker_processes 10 # backlog に、キューに積み上げられる最大数を設定する。 # failed (11: Resource temporarily unavailable) に対処できる。 listen "/var/sample.sock", backlog: 8192