Apache FreeBSD Listen queues soacceptqueue somaxconn

足りないと overflow

kernel: sonewconn: pcb 0xfffff801104b4620: Listen queue overflow: 193 already in queue awaiting acceptance

標準だと128 kern.ipc.soacceptqueue (default: 128)

# netstat -Lan
Current listen queue sizes (qlen/incqlen/maxqlen)
Proto Listen         Local Address         
tcp4  0/0/128        *.80                   
tcp6  0/0/128        *.80  

増やす

# sysctl kern.ipc.soacceptqueue=4096

# vi /etc/sysctl.conf
 ====
kern.ipc.soacceptqueue=4096
 ====
# /usr/local/etc/rc.d/apache24 restart
# netstat -Lan
Current listen queue sizes (qlen/incqlen/maxqlen)
Proto Listen         Local Address         
tcp4  0/0/511        *.80                   
tcp6  0/0/511        *.80 

Apacheの設定 ListenBackLog でも制限されている (default: 511)

増やす

# vi /www/conf/httpd.conf
 ====
ListenBackLog 1024
 ====
# /usr/local/etc/rc.d/apache24 restart
# netstat -Lan
Current listen queue sizes (qlen/incqlen/maxqlen)
Proto Listen         Local Address         
tcp4  0/7/1024       *.80                   
tcp6  0/0/1024       *.80  

kern.ipc.somaxconn -> kern.ipc.soacceptqueue

kern.ipc.somaxconn はFreeBSD 10.0から kern.ipc.soacceptqueue に名前が変わった。

Hide the unfortunate named sysctl kern.ipc.somaxconn from sysctl -a
output and replace it with a new visible sysctl kern.ipc.acceptqueue
of the same functionality. It specifies the maximum length of the
accept queue on a listen socket.
svn commit: r241781 - in head: lib/libc/sys sys/kern

During some research I found the following link that indicates a change for the kernel parameter kern.ipc.somaxconn from FreeBSD 10.0 onwards: https://www.freebsd.org/cgi/man.cgi?query=listen&sektion=2#end

https://github.com/saltstack/salt/issues/34583

参考

http://dokuosan.net/zousan/nikki170.html
Tuning FreeBSD for the highload

Searching through the kernel source, I eventually found my answer.
The message is reporting when QLEN > 3 * (QLIM / 2)

http://lawrencechen.net/2014/sonewconn-pcb-0xfffffe006acd9310-listen-queue

kernel: sonewconn: pcb 0xfffff801104b4620: Listen queue overflow: 193 already in queue awaiting acceptance
193 > 3 * (128 / 2) = 192