当前位置: 首页 > 面试题库 >

redis.conf中的“ tcp-backlog”是什么

许黎明
2023-03-14
问题内容

我对tcp-backlogredis.conf 感到困惑:

# TCP listen() backlog.
#
# In high requests-per-second environments you need an high backlog in order
# to avoid slow clients connections 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 511

tcp- backlog“完整的连接队列”(三次握手完成,所描述的内容的大小,位置)或“不完全连接队列”?

如果它表示“完整连接队列”,那我为什么要提高tcp_max_syn_backlog它来限制不完整连接队列的大小?


问题答案:

tcp-backlog是“完整连接队列”(三向握手完成,此处描述什么)的大小还是“不完整连接队列”的大小?

tcp-backlog完整连接队列 的大小。实际上,Redis将此配置作为listen(int s, int backlog)呼叫的第二个参数传递。

@GuangshengZuo已经很好地回答了这个问题。因此,我将专注于另一个。

如果它表示“完整连接队列”,那为什么我应该提高tcp_max_syn_backlog来限制不完整连接队列的大小?

引用您提到的文档:

该实现使用两个队列,一个SYN队列(或不完整的连接队列)和一个接受队列(或完整的连接队列)。将状态为SYN
RECEIVED的连接添加到SYN队列中,然后在状态变为ESTABLISHED时(即,在收到3次握手中的ACK数据包时)将其移至接受队列。顾名思义,然后简单地实现accept调用以消耗来自accept队列的连接。在这种情况下,listen
syscall的backlog参数确定接受队列的大小。

我们可以看到中的 项目complete connection queue已从中移出incomplete connection queue

如果您有一个somaxconn带有小号的大号tcp_max_syn_backlog,则可能没有足够的项目移动到complete connection queue,并且complete connection queue可能永远不会满。许多请求可能已经从第一个队列中删除,然后才有机会被移至第二个队列。

因此,仅提高的价值somaxconn可能行不通。你必须两个都养。



 类似资料:
  • 在redis.conf中,client-output-buffer-limit vs repl-backlog-size? redis主服务器为每个从服务器分配复制缓冲区,我可以设置客户端输出缓冲区限制500M。repl-buff注释主命令和runid'偏移量。

  • 问题内容: 我正在为Java游戏制作自己的自定义服务器软件(游戏和原始服务器软件都是用Java编写的)。没有可用的协议文档,因此我必须使用Wireshark读取数据包。 客户端连接时,服务器将以Gzip格式将其发送到级别文件。在发送大约94个数据包时,我的服务器通过ArrayIndexOutOfBoundsException使客户端崩溃。根据原始服务器的捕获文件,它大约在该点发送一个TCP窗口更新

  • 根据ServerSocket(int port,int backlog),

  • 本文向大家介绍什么是TCP 连接的三次握手 相关面试题,主要包含被问及什么是TCP 连接的三次握手 时的应答技巧和注意事项,需要的朋友参考一下 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_

  • 这让我想到了一些问题: 此TCP套接字是另一种类型的Unix域套接字吗?这个TCP套接字到底是什么? 文件中提到的cosocket是什么?我用谷歌找不到 TCP/IP模型的传输层也使用TCP协议,此API是否允许直接在传输层编程,绕过应用层?

  • 本文介绍:http://tldp.org/howto/tcp-keepalive-howto/overview.html 它指出TCP保持有效的原因是: null TCP keepalive对于上面的情况仍然是必要的吗?