用法
tcp-backlog 511
用途
在linux
系统中控制tcp三次握手已完成连接队列
的长度。
在高并发系统中,你需要设置一个较高的tcp-backlog
来避免客户端连接速度慢的问题(三次握手的速度)。
注意事项
1.已完成连接队列
的长度也与操作系统中somaxconn
有关,取二者最小min(tcp-backlog,somaxconn)
// linux查看已完成连接队列的长度
$ /proc/sys/net/core/somaxconn
//mac查看已完成连接队列的长度
$ sysctl -a|grep somaxconn
2.已完成连接队列
又与半连接队列
长度有关
// linux查看半连接队列长度
$ /proc/sys/net/ipv4/tcp_max_syn_backlog
//mac查看半连接队列长度
$ sysctl -a|grep backlog
3.简要介绍下半连接
与已完成连接
半连接
:服务端收到客户端syn
后,将连接放入半连接队列。如果半连接队列已满会丢弃,客户端报错connection time out
。
已完成连接
:服务端收到客户端的ack
后,从半连接队列中拿出连接放入已完成连接队列。如果已完成连接队列已经满则无法放入,客户端报错read timeout
或者 connection reset by peer
原生注释
# TCP listen() backlog.
#
# In high requests-per-second environments you need a high backlog in order
# to avoid slow clients connection issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 1