読者です 読者をやめる 読者になる 読者になる

日々精進

新しく学んだことを書き留めていきます

EC2で同時接続数が700ぐらいから伸びない現象があった

現象は以下。
・Socket.ioでクライアントと接続している
・同時接続数が700ぐらいになると新規に接続出来なくなる
・しばらくすると既存の接続も切れ始める


最初はファイルディスクリプタの上限設定を疑ったが、上限を変更しても改善しなかった。
原因はip_conntrack_maxの設定値だった。
2013-06-05 - 日々精進で紹介したように、iptablesを使ってポートフォワーディングしていたんだけど、やりとりするパケットの数が多すぎるとポートフォワーディングのキューから溢れてパケットが捨てられてしまうらしい。
そのキューの大きさを決めるのがip_conntrack_max。これを大きくすると問題が解決した。
以下を/etc/sysctl.confに書いておくとよい。

net.ipv4.netfilter.ip_conntrack_max = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768    61000

サーバは難しいなぁ。。
参考:apache 2.2 - What limits the maximum number of connections on a Linux server? - Server Fault