如何模拟大量同时请求 Web 服务器?

5

我想测试一下我的nginx + node.js设置能够达到多少性能,并尝试优化以提高性能。我发现了一篇很好的文章,详细介绍了可以对操作系统进行调整以承受更多请求(但我不确定是否完全理解)。

假设我想测试它在一段时间内如何处理每秒60000个请求。

我尝试使用apachebench和beeswithmachineguns。apachebench似乎仅限于本地约3500个请求。增加并发只会以某种方式降低平均每秒请求数。我使用beeswithmachineguns成功看到(声称)每秒约5000个请求的测试页面,但这仍然远远达不到我想要的目标。然而,它似乎有点buggy。

是否有可靠的方法模拟这么多的请求?

1个回答

5
你也可以尝试使用siege工具: http://www.joedog.org/siege-home/
您提供的文章我觉得不错。
生成60,000次请求并同时回答它们会导致资源短缺问题,最好是有其他计算机(可能在同一网络上)来生成请求,并让您的服务器仅处理回答。
下面是一个示例siege配置,可以在一分钟内达到您所需的60,000次请求速率并命中您的服务器。
# ~/.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 服务器来完成这个想法。这可行吗? - dsp_099
你首先要遇到的是 TCP sockets 不足的问题。Nginx(正确配置)的CPU和RAM占用非常低。随着代码库的增加,Node.js将增加对CPU(以及后来的RAM)的占用。其他语言在这里可能会给你更高的性能(例如编译的PHP,带有OP缓存的PHP,C/C++)。无限扩展不可能,否则你会拥有一个可以轻松卖给亚马逊,Facebook和谷歌的系统。Nginx作为负载均衡器完全没有问题。 - Fleshgrinder
如果nginx必须筛选传入的请求并将它们分配给其他10台服务器,那么如果它被用作负载均衡器,它是否也会遇到TCP套接字的问题,或者我漏掉了什么?感谢您的回复。 - dsp_099
你总会遇到一些障碍。但是,为单个nginx专门配置一台机器可以利用所有操作系统资源。例如,您可以通过文件套接字(sshfs等)与上游服务器通信,并且不会使用任何TCP套接字(而且更加安全)。 - Fleshgrinder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接