确定Web服务器每秒的实际请求量


15

我要设置nginx堆栈并在上线之前优化配置。运行ab来对机器进行压力测试,我很失望地看到事情以每秒150个请求的速度达到顶峰,并且大量请求花费了大于1秒的时间才能返回。奇怪的是,机器本身甚至没有呼吸困难。

我终于想到要ping通此框,并看到ping时间约为100-125毫秒。(令我惊讶的是,这台机器遍布全国)。因此,似乎网络延迟正在主导我的测试。在与服务器位于同一网络上的机器上运行相同的测试(ping时间<1ms),我看到每秒有5000个请求,这与我对机器的预期更加一致。

但是,这让我开始思考:如何确定和报告Web服务器每秒的“实际”请求量?您总是会看到有关性能的声明,但是是否不应该考虑网络延迟?当然,我可以每秒向服务器旁边的计算机提供5000个请求,但不能为全国的计算机提供服务。如果我的连接速度很慢,它们最终会影响服务器的性能,对吗?还是我在想这一切错了?

如果这是网络工程101的东西,请原谅我。我是一名按行业划分的开发商。

更新:为清楚起见进行了编辑。


ab有一个并发选项。您设置了什么?另外,如果您正在通过家庭ADSL连接进行测试,则该测试很可能是由您的带宽主导的,根本不会在服务器上进行任何测试。
Ladadadada 2012年

我熟悉ab的并发选项,并尝试了各种值来发现限制。就像我在上面写的那样,我知道我的初始测试是由网络主导的,并且没有反映服务器的功能。但是我的问题仍然存在:大多数人从哪里运行测试以获取实际指标?测试是从与服务器在同一网络上的一个盒子进行的(有效地降低了网络延迟),但它们看起来并不像“公平”的数字,因为真实的用户将来自网络外部。
2012年

实际上,从同一网络运行的测试实际上可能更“公平”,因为它们实际上会忽略该网络。您的用户可能全部位于不同的网络上-因此所有这些网络的总带宽应轻易超过服务器的可用带宽。一起考虑所有用户,瓶颈就是服务器的功能-而考虑单个用户,瓶颈可能是单个用户的带宽。(理想的测试可能是从多个远程位置运行,以最好地模拟实际情况,尽管大​​多数情况下不需要这样做)。
cyberx86'3-3-23

“考虑所有用户,因此瓶颈就是服务器的功能” –这是有道理的,而且似乎是思考它的正确方法。我想服务器可能位于笨拙的网络设备后面,从而限制了其对外部世界的响应速度,但这并不是服务器的真正问题,需要单独解决。我想像Pingdom这样的东西可以用来运行理想的测试。
2012年

Answers:


3

如果您在世界上某个地方访问服务器时担心服务器的性能,请让世界上某个地方的朋友(应该有良好的带宽)在他的linux机器上安装sproxy + siege。只需下载,配置,制作即可。这些工具很小,可以在几秒钟内完成编译。

首先,sproxy在linux机器上启动。默认情况下,它将在本地主机(127.0.0.1)上的端口9001上运行。如果要从外部访问它,只需将其出站IP地址作为参数传递给它。
现在,通过将浏览器设置为使用此ip和端口作为HTTP代理,连接到sproxy。从现在开始,您所做的一切都由sproxy记录,以后可以重播。现在,在您的网站上四处浏览,做客户会做的事情,并尝试做使用服务器的“昂贵”事情。
完成后,通过按CTRL ^ C结束sproxy。它记录了您对的操作$HOME/urls.txt。将文件移动到包围所在的位置。要开始压力测试,请运行siege -f urls.txt -d NUM -c NUMd代表请求之间的延迟,在进行性能测试时,请使用1(秒)。c代表模拟的并发用户数。随意选择,但从低处开始。Siege将为您显示每秒的事务数量,错误率,平均请求花费的时间等。它是一个功能强大且易于使用的工具。
如果您需要更多有关参数的信息(有很多),请查看攻城手册sproxy手册

为了获得更真实的结果,请允许许多人同时测试来自各个国家/地区的服务器,然后让他们向您发送统计信息。


2

应从访问日志中采取实际的请求/秒度量。IMO,请求延迟与服务器负载无关,因为服务器以相同的速度处理所有请求,而不管其起源如何。


1

考虑使用诸如Soasta Cloudtest之类的服务。有了它,您可以获得有关测试的非常详细的报告,并且可以运行来自各种公共云/虚拟化提供商的性能测试。您可以配置要锤击服务器的强度和时间。他们还提供免费的“ 精简版 ”版本,因此您可以在投入任何资金之前先查看其功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.