【问题标题】:Need to increase the number of concurrent HTTP connections to 85000需要将并发HTTP连接数增加到85000
【发布时间】:2015-10-13 02:30:46
【问题描述】:

我有 2 台机器的设置。我使用一个作为服务器,另一个作为客户端。它们使用 1Ghz 链路直接连接。两台机器都有 4 个内核、8Gb 内存和几乎 100Gb 的磁盘空间。我需要调整 Nginx 服务器(我正在尝试使用它,但我也可以使用任何其他服务器)来处理 85000 个并发连接。我在服务器上有一个 1kb 的文件,我在客户端上使用 curl 在所有连接上获取相同的文件。 在尝试了各种调整设置后,当我调用 curl 大约 40000 次时,我有 1500 个已建立的连接和大约 30000 个 TIME_WAIT 连接。有没有办法让TIME_WAITs ESTABLISHED? 在调整服务器和客户端方面的任何帮助将不胜感激。我对使用 Linux 并试图掌握它非常陌生。两台机器上的linux版本都是Fedora 20。

【问题讨论】:

标签: linux curl nginx performance-testing connection


【解决方案1】:

除了调整 Nginx 之外,您还需要根据 tcp 连接数、套接字、打开文件等的限制来调整 Linux 安装。

这两个链接应该给你一个很好的概述:

https://www.nginx.com/blog/tuning-nginx/

https://mrotaru.wordpress.com/2013/10/10/scaling-to-12-million-concurrent-connections-how-migratorydata-did-it/

【讨论】:

  • 感谢链接 D.K.我实际上也调整了我的 Linux 安装,但没有运气。我注意到的一件事是,有 1500 个并发连接时,我的 RAM 几乎耗尽了。它可能是我正在使用的 curl 脚本。知道如何用 bash 或 python 编写多线程脚本,以在不耗尽 RAM 的情况下最大化连接吗?
  • 如果您仅从单一来源对其进行测试,那么限制可能不是服务器,而是客户端。您是否还确保增加对客户端计算机的限制?使用其中一种负载测试服务可能更容易,它将通过打开来自多个来源的连接来模拟更真实的场景。我使用了这些人:loadimpact.com 在预算有限的情况下,您可以尝试在自己的基础架构上部署 Locust (locust.io)。但请记住,除非您可以使用它启动多个主机,否则托管服务将提供更真实的结果。
【解决方案2】:

您可能想要检查所有这些连接使用了多少内存 TCP 缓冲区等。

查看这个 SO 线程:How much memory is consumed by the Linux kernel per TCP/IP network connection?

另外,这个页面也不错:http://www.psc.edu/index.php/networking/641-tcp-tune

鉴于您的两台机器是同一个物理网络并且延迟非常低,您可以使用相当小的 TCP 窗口缓冲区大小。现代 Linux(您没有提及您使用的内核)具有自动调整这些缓冲区的 TCP Autotuning,因此您不必担心这一点,除非您使用的是旧内核。

无论如何,应用程序可以分别分配发送和接收缓冲区,这会禁用 TCP 自动调整,因此如果您正在运行执行此操作的应用程序,您可能希望限制应用程序可以使用多少缓冲区空间每个连接的请求(SO 文章中提到的 net.core.wmem_max 和 net.core.rmem_max 变量)。

【讨论】:

    【解决方案3】:

    我会推荐https://github.com/eunyoung14/mtcp 来实现 100 万并发连接,我对 mtcp 进行了一些调整,并在使用过的具有 32G 内存和 8 核的 Dell PowerEdge R210 上进行了测试,以实现 100 万并发连接。

    【讨论】:

    • 当你推荐一个库时,通常会展示它是如何应用的。你能举个简短的例子吗?
    猜你喜欢
    • 2012-09-18
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    相关资源
    最近更新 更多