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