【问题标题】:What is the practical / hard limit on socket connections per server每台服务器的套接字连接的实际/硬限制是多少
【发布时间】:2011-05-22 11:13:48
【问题描述】:

我有许多客户端设备打开由 Windows 2008 R2 服务器上运行的服务公开的套接字连接。我想知道并发客户端连接数的硬性限制是什么。

【问题讨论】:

    标签: sockets windows-server-2008-r2


    【解决方案1】:

    根据this article,一个硬限制是(曾经)16,777,214。实际限制还取决于您的应用程序:例如,如果您为每个连接创建一个线程,那么实际限制来自线程数量的限制,而不是来自网络堆栈。任何进程可能拥有的句柄数量也有限制,等等。

    【讨论】:

      【解决方案2】:

      假设您为服务器选择了合理的架构,那么限制将与内存和 CPU 相关。恕我直言,您永远不会达到 Martin 提到的硬限制:)

      因此,恕我直言,与其担心永远不会达到的理论限制,不如考虑如何设计应用程序以及如何测试它以确定当前最大的客户端连接数在给定的硬件上维护您的应用程序。对我来说重要的是从第 0 天开始运行您的性能测试(请参阅 here 了解我对此进行解释的博客文章)。现代操作系统和硬件允许您构建非常可扩展的系统,但简单的日常编码和设计错误很容易浪费可扩展性,因此您必须始终运行 perf 测试,以便您知道何时构建障碍表现。您根本无法在项目结束时返回并修复此类错误。

      顺便说一句,我在具有低规格 VM 的 Windows 2003 Server 上运行了一些测试,并且使用基于重叠 I/O(I/O 完成端口)设计的简单服务器轻松实现了超过 70,000 个并发和活动连接.有关详细信息,请参阅this answer

      我个人的方法是使用您决定的任何技术快速组装服务器外壳(我更喜欢使用 I/O 完成端口和最少线程的非托管 C++),有关更多详细信息,请参阅this blog posting。然后构建一个或一系列可以对应用程序进行压力测试的客户端,并在您实现服务器逻辑时不断更新和运行测试客户端。随着服务器的复杂性增加,您会看到最大并发客户端的曲线逐渐下降;可扩展性的大幅下降应该会导致您检查最新的签入以寻找不幸的设计决策。

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 2016-05-01
        • 2012-03-18
        • 2010-12-07
        • 2017-03-06
        • 2019-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多