我最近一直在思考如何在我们的 webapps 上线之前测试它们的性能。我知道我们无法为这个测试复制实际的用户活动,因为它是新功能。我可以通过查看我们的日志来对用户活动做出一些猜测,并相应地创建测试,但我想知道这会实现什么。
我很想知道如何:
- 确定负载和
- 确定行为
与现实世界的场景相比,这将使您走多远?
我最近一直在思考如何在我们的 webapps 上线之前测试它们的性能。我知道我们无法为这个测试复制实际的用户活动,因为它是新功能。我可以通过查看我们的日志来对用户活动做出一些猜测,并相应地创建测试,但我想知道这会实现什么。
我很想知道如何:
与现实世界的场景相比,这将使您走多远?
很大的问题。多年来,我们一直在我的公司运行基准测试和负载测试,主要基于 HTTP。
在进入复杂场景之前,我们通常从基于Apache Bench(与 Apache 捆绑的“ab”命令)的简单基准测试开始。这不是负载测试,而是性能测试,因为生成的客户端实际上会等待 HTTP 查询完成,然后再进行下一个。基本思想是尝试'ab -c N -t 30' N=1,2,4,8,50,100(例如)。您很快就会了解您应该期望的可扩展性和最大吞吐量。
注意:在测试服务器附近运行“ab”命令(最好在同一个 LAN 上),否则您还将对网络进行基准测试(延迟是这里的主要问题)。但在某些业务案例中,这是真正需要测试的整个系统(服务器 + 网络)。
从这里开始,如果结果看起来不错(即吞吐量扩大到服务器端的处理器数量,错误率低或为零),我们将继续进行负载测试。否则我们会寻找瓶颈,因为负载测试只会确认可伸缩性问题,并且一旦负载大于支持的吞吐量(100% 的 500 个内部错误、连接断开、大超时、服务器抖动等),很可能会显示可怕的结果。
顺便说一句,负载测试是指使用可以对给定服务器/应用程序应用任何负载的工具,尤其是服务器无法处理的负载(例如:Jmeter、Tsung)。负载测试中非常有趣的是观察服务器过载时发生的情况。当您选择性能不可接受的确切测试点时,确定服务器可以处理的最大负载取决于您。
然后是猜测或观察现有模式的问题。在许多情况下,我们被要求对新网站执行负载测试,但显然没有观察到实际行为。否则,您可以使用分析并观察前十页:您的场景至少应该遍历它们。您需要一些导航路径:
其他提示:
总体思路是从简单的测试开始逐步进行,否则如果它们不符合完美的可扩展性曲线,您将很难解释结果。你猜怎么着?它们永远不符合完美的可扩展性曲线......