【问题标题】:How to simulate a huge amount of simultaneous requests to a web-server?如何模拟对 Web 服务器的大量并发请求?
【发布时间】:2023-03-24 12:31:01
【问题描述】:

我想看看我的 nginx + node.js 设置能走多远,以及我可以做出哪些改变来挤出额外的性能我偶然发现a great article 详细介绍了可以对操作系统进行的一些调整以承受更多请求(我不确定我是否完全理解)

假设我想看看它如何在一段时间内每秒处理 60,000 个请求。

我已经尝试过 apachebench 和 beeswithmachineguns。 apachebench 似乎在本地限制为大约 3500 个请求或其他东西。提高并发性只会以某种方式降低平均请求/秒。 我能够看到(声称)每秒约 5000 个请求到带有 beeswithmachineguns 的测试页面,但这仍然与我想要的相去甚远。不过,这似乎有点偏题。

有没有可靠的方法来模拟这样的大量请求?

【问题讨论】:

    标签: node.js tcp nginx debian stress-testing


    【解决方案1】:

    你也可以试试siege

    我觉得你链接的文章不错。

    生成 60,000 个 rq/s 并同时回答它们将是一个问题,因为您肯定会耗尽资源。最好有一些其他计算机(可能在同一网络上)来生成请求并让您的服务器只处理回答这些请求。

    这是一个示例攻城配置,用于您所需的 60,000 rq/s,它将在您的服务器上运行一分钟。

    # ~/.siegerc
    
    logfile         = $(HOME)/siege.log
    verbose         = true
    csv             = true
    logging         = true
    protocol        = HTTP/1.1
    chunked         = true
    cache           = false
    accept-encoding = gzip
    benchmark       = true
    concurrent      = 60000
    connection      = close
    delay           = 1
    internet        = false
    show-logfile    = true
    time            = 1M
    zero-data-ok    = false
    

    如果您没有生成负载的基础设施,请租用它。一个非常棒的服务是Blitz.IO(我不隶属于他们)。它们具有简单直观的界面,并且(最重要的是)它们几乎可以为您产生任何流量。

    【讨论】:

    • 看起来不错,我会试一试。在这样的负载下,服务器的哪个部分会首先发出?它会用完 tcp 套接字还是仅仅是 CPU / RAM 负载等问题?我正在寻找一个可以无限期地处理这种类型的负载的系统。我正在考虑仅出于负载平衡的目的使用一台带有 nginx 的机器。这可能吗?
    • 首先用完的是 TCP 套接字。 nginx(正确配置)的 CPU 和 RAM 占用量非常低。随着代码库的增加,Node.js 会增加占用你的 CPU(以及后来的 RAM)。其他语言可能会在这里为您提供更多性能(例如编译的 PHP、PHP \w OP 缓存、C/C++)。无限期是不可能的,否则您将拥有一个可以轻松出售给亚马逊、Facebook 和谷歌的系统。 Nginx 作为负载均衡器一点问题都没有。
    • 如果 nginx 必须筛选传入请求以将它们典当到其他 10 个服务器,如果它被用作负载平衡器,它是否也会遇到 TCP 套接字问题,或者我错过了什么吗?感谢您的回复
    • 你总会遇到一些障碍。但是单个 nginx 的专用机器为其提供了所有操作系统资源。例如,您可以通过文件套接字(sshfs 等)与上游服务器通信,而您不会使用任何 TCP 套接字(而且它更安全)。
    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2019-11-04
    • 2017-02-28
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多