sonewconn の Listen queue overflow に対応する

あまり見慣れないメッセージがログに残っていました。
どうも HTTPS のアクセスが集中した際に発生している模様。

kernel: sonewconn: pcb 0xfffff800051b3780: Listen queue overflow: 193 already in queue awaiting acceptance (23 occurrences)
kernel: sonewconn: pcb 0xfffff800051b3780: Listen queue overflow: 193 already in queue awaiting acceptance (214 occurrences)
kernel: sonewconn: pcb 0xfffff800051b3780: Listen queue overflow: 193 already in queue awaiting acceptance (17 occurrences)

いろいろ調べた結果、kern.ipc.soacceptqueue を調整すれば良さそう。
デフォルトは128のようです。

# sysctl kern.ipc.soacceptqueue
kern.ipc.soacceptqueue: 128

# netstat -Lan | grep 443
tcp6  0/0/128                          *.443
tcp4  0/0/128                          *.443

ふむふむ。
しかしメッセージでは193なので不思議だったのですが、どうも2で割って3倍にするらしいです。
これで192なので、192を越えた193個目をキューに入れようとしてこのメッセージが出たという事なのでしょうね。

こちらをとりあえず倍の256にしてみます。

# sysctl kern.ipc.soacceptqueue=256
# /usr/local/etc/rc.d/nginx restart
# netstat -Lan | grep 443
tcp6  0/0/256                          *.443
tcp4  0/0/256                          *.443

ふえました。
これで様子を見ることにします。

technical

Posted by yokky