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
参考: