Redis启动的时候,出现如下警告信息:
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
参数tcp-backlog
用法:
tcp-backlog 511
用途:
在Linux
系统中控制tcp三次握手已完成连接队列
的长度。
在高并发系统中,你需要设置一个较高的tcp-backlog
来避免客户端连接速度慢的问题(三次握手的速度)。
注意事项
1、已完成连接队列
的长度也与操作系统中somaxconn
有关,取二者最小min(tcp-backlog,somaxconn)
// Linux查看已完成连接队列的长度 $ vim /proc/sys/net/core/somaxconn
2、已完成连接队列
又与半连接队列
长度有关
// Linux查看半连接队列长度 $ vim /proc/sys/net/ipv4/tcp_max_syn_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
解决方案
在/etc/sysctl.conf
文件中添加如下配置:
net.core.somaxconn = 2048
然后在终端中执行
sysctl -p
参考: