3

我有一个在亚马逊网络服务上运行的 PHP 应用程序。这是一个相对简单的 PHP 脚本,它基本上对 SQL 数据库进行简单的写入。此数据库是一个超大型 RDS 实例。PHP 在负载均衡器后面的大型 EC2 实例上运行。

我想做的是对我的脚本进行压力测试,以模拟大约 800 个同时连接的用户(是的,这确实是估计值)。

我听说过 Siege,但我不确定如何使用它来测试我的应用程序。如果我尝试从家里的连接运行它,我不确定我的 PC / ADSL 是否足够快以创建足够的流量来模拟 800 个用户同时攻击 EC2(因此是 RDS)。

是否建议在另一个区域中启动另一个 EC2 实例来简单地“围攻”我的应用程序?或者可能运行 2 个 EC2 实例,每个实例都围攻 400 个用户!?

希望这将彻底测试负载平衡、RDS 和 EC2。

有没有人有这种高并发用户测试的经验?

安迪

4

4 回答 4

8

我写了一个脚本,它可能会帮助您满足您的需求,详情请点击此处,来源请点击此处

但首先,实际上,这是最重要的事情,您需要考虑什么定义了“用户”。虽然从描述性的角度来看似乎很明显,但从技术角度来看,您需要开始谈论每秒请求数。

既然 bug 熊已经不在了,要使用 ELB 对 Amazon 运行负载测试,您可能想知道几件事。

  1. 在这种负载下,您很可能需要要求亚马逊“预热”东西。上次我研究这个时,我发现 ELB 本质上是一个在简单实例上运行的软件负载均衡器。像所有事物一样,这些实例具有吞吐量限制,并且往往会在每秒 40 个请求左右(非常模糊)达到最大值。它们会自动缩放,但此算法不适合负载测试,因此预热是亚马逊预先启动 X ELB,其中 X 基于您在请求中提供给它们的信息(请参阅我关于每秒请求数的第一点,而不是用户)。

  2. ELB 可以缓存 DNS,这在负载测试中可能会导致问题。如果您的测试工具是基于 java 的(如 JMeter),请使用:-Dsun.net.inetaddr.ttl=0

无论您选择哪种解决方案,都要非常清楚您的测试本身可能会成为瓶颈,您应该先检查这一点,然后再指责您正在测试的应用程序。

于 2012-08-01T21:16:45.640 回答
3

有许多基于云的负载测试服务可用,包括

http://blazemeter.com http://www.neustar.biz/enterprise/web-performance

它们可能会变得非常昂贵,但话又说回来,可以启动许多 ec2 实例进行测试(加上您的工程时间)。

于 2012-07-30T18:09:56.453 回答
2

不要放弃围攻。它是一个简单但非常强大的负载测试工具。基本用法示例可能是:

siege -d 1 -c 10 http://url

这将模拟大约每 1 秒发出请求的 10 个同时连接(用户)。如果您的 HTTP 请求和响应的大小足够小,那么您可能会很好 - 即使使用您的 DSL 连接。Siege 将向您显示统计数据,包括平均响应大小,因此您应该能够轻松估计您的限制是什么。如果连接的大小太大,那么使用单独的 EC2 实例的想法肯定会很好用。可能一个实例就足够了,但您可能必须增加正在运行 siege 的机器上的文件描述符限制(否则您将用完它们):

sysctl -w fs.file-max=100000

如果您想使用多个 URL 进行测试,您可以将它们放在一个文本文件中并告诉 siege 将其用作目标:

siege -d 1 -c 800 -i -t 2m -f urls.txt

将模拟 800 个用户每 1 秒发出请求,持续 2 分钟。URL 将从 urls.txt 文件中随机选择 (-i)。

我建议运行几个测试,逐渐增加连接数。

当它完成或使用 ctrl+C 手动终止它时,您应该会得到很好的统计信息。如果测试会产生比您当前拥有的更多的流量,您将必须请求 AWS 支持的 ELB 预热。ELB 在响应流量高峰时扩展吞吐量的速度很慢。

默认情况下,Siege 使用 HTTP 1.1,因此如果您的服务器使用持久连接 - 它会起作用。

于 2013-03-14T20:16:12.307 回答
1

有许多工具可以从云中生成负载——这可能是您想要做的(这比设置自己的负载引擎容易得多)。一定要选择一个可以处理 DNS 负载平衡的...许多在测试期间无法处理新的 DNS 条目,因此不能准确地测试 ELB 应用程序。上面对 JMeter 的建议有所帮助,但仍不完全准确,因为一旦新 IP 可用,更大百分比的 VU 将切换到新 IP。真实用户将使用他们开始使用的 IP,只有新用户才会使用新添加的 IP。

我会拉皮条我们的软件,它可以准确地测试 ELB 站点 - Web Performance Load Tester。您可以在这里试用免费版本:http ://www.webperformance.com/load-testing/free-load-tester-lite.html ,如有任何问题,请随时与我们联系。

于 2012-08-06T14:10:25.143 回答