不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2022-02-27 20:02:59  修改时间:2024-04-19 17:22:28  分类:MySQL/Redis  编辑

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

 

 

参考:

深入探索 Linux listen() 函数 backlog 的含义