我正在设置 nginx 堆栈并在上线之前优化配置。运行 ab 对机器进行压力测试,令我失望的是,每秒最多可处理 150 个请求,而且相当多的请求需要 1 秒以上才能返回。奇怪的是,机器本身甚至没有喘息。
我最终想到要 ping 一下这个盒子,结果发现 ping 时间大约为 100-125 毫秒。(令我惊讶的是,这台机器位于全国各地)。因此,网络延迟似乎主导了我的测试。从与服务器位于同一网络上的机器运行相同的测试(ping 时间 < 1 毫秒),我看到每秒有 > 5000 个请求,这更符合我对这台机器的预期。
但这让我思考:如何确定并报告 Web 服务器每秒请求数的“实际”测量值?您总是会看到有关性能的声明,但难道不应该考虑网络延迟吗?当然,我可以每秒向服务器旁边的机器提供 5000 个请求,但不能向全国各地的机器提供。如果我有很多慢速连接,它们最终会影响我的服务器的性能,对吗?还是我的想法完全错了?
如果这是网络工程 101 的东西,请原谅我。我的职业是开发人员。
更新:为清晰起见,进行了编辑。
答案1
如果你关心你的服务器在世界某个地方访问时的性能,可以请世界上某个地方的朋友(应该有良好的带宽)安装sproxy + 围攻在他的 Linux 机器上。只需下载、配置、制作。这些工具很小,它们可以在几秒钟内完成编译。
首先,sproxy
在 Linux 机器上启动。默认情况下,它将在 localhost (127.0.0.1) 上的端口 9001 上运行。如果您想从外部访问它,只需将出站 IP 地址作为参数传递给它。
现在通过将浏览器设置为使用此 IP 和端口作为 HTTP 代理来连接到 sproxy。从现在开始,您所做的一切都会被 sproxy 记录下来,以后可以重播。现在浏览您的网站,做您的客户会做的事情,并尝试使用您的服务器做“昂贵”的事情。
完成后,按 CTRL^C 结束 sproxy。它将您的操作记录到$HOME/urls.txt
。将文件移动到 siege 所在的位置。要开始压力测试,请运行siege -f urls.txt -d NUM -c NUM
.d
代表请求之间的延迟,在进行性能测试时,使用 1(秒)。c
代表模拟并发用户数。随意选择,但从低开始。Siege 将向您显示每秒的交易数、错误率、平均请求所用的时间等。它是一个功能强大且易于使用的工具。
如果你需要更多关于参数的信息(有很多),请查看攻城手册一个sproxy 手册
为了获得更真实的结果,让来自不同国家的许多人同时测试您的服务器,并让他们向您发送统计数据。
答案2
实际的请求/秒测量值应从访问日志中获取。在我看来,请求延迟与服务器负载无关,因为服务器以相同的速度处理所有请求,而不管其来源如何。
答案3
考虑使用以下服务Soasta 云测试。有了它,您可以获得非常详细的测试报告,并且可以运行来自各种公共云/虚拟化提供商的性能测试。您可以配置对服务器的打击力度和打击时间。他们还有一个免费的“精简版“版本,这样你就可以在投入任何资金之前看到它能做什么。