【问题标题】:listen() backlog upper limitslisten() 积压上限
【发布时间】:2013-08-09 22:59:08
【问题描述】:

尽管关于这个话题说了很多,但我仍然很难过。

我尝试了一个能够处理适当负载斜坡的巨型 linux 服务器,大概每秒有数千个连接。现在,如果我检查默认的 listen() 队列:

#cat /proc/sys/net/core/somaxconn
128

这根本不是实际的队列大小。我怀疑它可能是一个遗产,实际大小是这样给出的:

#cat /proc/sys/net/ipv4/tcp_max_syn_backlog
2048

但是,man tcp 表示后者是等待来自客户端的 ACK 的连接,这与尚未接受的连接总数不同,这就是 listen() backlog 的含义。

所以我的问题是如何增加 listen() backlog,以及如何获取/设置它的上限(在内核重新编译之前)?

【问题讨论】:

  • '这根本不可能是实际队列大小' - 为什么不呢?有界队列仅在推送速率始终大于弹出速率时才会溢出。

标签: c linux tcp backlog


【解决方案1】:

somaxconn 是等待的完成个连接数。

tcp_max_syn_backlog 是等待的不完整连接数。

它们不是一回事。这一切都在man page 中进行了描述。

【讨论】:

    【解决方案2】:

    您可以按照以下说明增加它:https://serverfault.com/questions/271380/how-can-i-increase-the-value-of-somaxconn - 基本上是使用 sysctl。

    是的,somaxconn 是听积压的上限。

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 2012-06-22
      • 2015-12-29
      • 2018-11-17
      • 2015-06-03
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多