【问题标题】:backlog value in listen system call监听系统调用中的积压值
【发布时间】:2010-12-10 18:45:18
【问题描述】:

我对listen系统调用中的积压值有疑问。来自监听系统调用的手册页。

如果 backlog 参数大于 /proc/sys/net/core/somaxconn 中的值,那么它会被静默截断为该值;此文件中的默认值为 128。

这意味着我的服务器一次只能接受 128 怎么办?我可以简单地将值设置为可能的最大数量,以便我可以访问更多数量的连接吗??

【问题讨论】:

    标签: c linux sockets


    【解决方案1】:

    积压值不是最大连接数,而是未完成连接数,即您尚未接受的连接数:ed。

    【讨论】:

      【解决方案2】:

      这个数字只是连接队列的大小,新的连接等待某人接受它们。只要您的应用程序调用accept(),就会从该队列中删除一个等待连接。因此,您绝对可以同时处理超过 128 个连接,因为它们通常只在队列中花费很短的时间。

      【讨论】:

      • @Greg - 所以积压值仅表示连接队列的大小,而不是要接受的连接数。一旦接受完成,它将从队列中删除,为其他连接提供空间。
      【解决方案3】:

      是的。使用诸如

      之类的命令
      $ echo 1000 >/proc/sys/net/core/somaxconn
      

      将限制设置得更高。例如,请参阅this page 了解更多调优技巧。

      【讨论】:

      • 这看起来很简单直接。但是将积压值增加到最大数量确实会增加为内核中的侦听队列分配的内存。有什么叫做合理值的东西不会增加开销并提供更好的性能吗??
      • 呃……存储东西一般需要内存。如果您需要更大的积压,但又不愿意花费内存来存储它……恐怕我不确定您能做什么。
      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 2020-09-17
      • 2021-03-21
      • 2013-11-06
      • 2016-01-28
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多