3

我有一个PHP应用程序,我在亚马逊的Web服务上运行。这是一个相对简单的PHP脚本,它基本上可以简单地写入SQL数据库。这个数据库是一个Xtra Large RDS实例。 PHP运行在负载平衡器后面的大型EC2实例中。测试亚马逊EC2,RDS和ELB性能

我想要做的是压力测试我的脚本,以模拟大约800位用户同时连接的所有连接(是的,这是真正的估计)。

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

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

有人希望这会彻底地测试负载平衡,RDS和EC2s。

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

安迪

回答

7

我写了一个脚本,可能有助于你需要什么,详情here,来源here

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

现在,BUG熊已经不存在了,为了使用ELB对亚马逊运行负载测试,有几件事情你可能想知道。

  1. 在这种负载情况下,您很可能需要向亚马逊询问“预热”的事情。上次我研究这个时,我发现ELB本质上是一个运行在简单实例上的软件负载均衡器。就像所有的事情一样,这些实例有一个吞吐量限制,并且往往会在每秒40个请求周围(非常模糊)发生。他们会自动缩放,但是这种算法不适合加载测试,所以预热是亚马逊事先旋转X ELB的地方,其中X基于您在请求中提供给他们的信息(请参阅我的第一个关于每秒请求的点,而不是用户)。

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

无论你选择的解决方案,很清楚,你的测试本身可能成为瓶颈,你应该在指责你正在测试的应用程序之前先检查它。

3

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

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

他们可以得到相当昂贵的,但再次,因此可以旋转一些ec2实例来测试(加上你的工程时间)。

1

有许多工具可以从云中生成负载 - 这可能是您想要做的事情(这比设置自己的负载引擎容易得多)。一定要选择一个能够处理DNS负载平衡的功能......许多人在测试过程中无法处理新的DNS条目,因此不能准确测试ELB应用程序。以上JMeter的建议有助于,但仍不完全准确,因为更大比例的VU将在可用时立即切换到新的IP。真正的用户将继续使用他们开始使用的IP,只有新用户才会去新添加的IP。

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

1

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

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

这将模拟10个同时连接(用户)每隔1秒发出一次请求。 如果您的HTTP请求和响应的大小足够小,那么您可能会很好 - 即使使用您的DSL连接。 Siege将向您显示统计数据,包括平均响应大小,因此您应该能够轻松估算出您的限制。如果您的连接规模很大,使用单独EC2实例的想法绝对可行。也许一个例子就够了,但你可能要增加真实乳宁攻城机器上的文件描述符限制(否则你会跑了出来):

sysctl -w fs.file-max=100000 

如果你想与大家能多要测试的网址把它们放在一个文本文件,并告诉攻城用它作为目标:

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

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

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

你应该在完成时得到很好的统计数据,或者你用ctrl + C手动终止它。 如果测试产生的流量远远超过您目前的流量,您将不得不请求支持AWS的ELB预热。响应流量峰值,ELB缓慢扩展吞吐量。

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

+0

伟大的工具!我喜欢你可以延迟每个用户每秒钟只有1次,这是我对ab的问题,它只是轰炸了服务器并将其崩溃。 – soote 2015-03-24 00:28:13