Rest JMeter吞吐量在达到Amazon ELB时下降

Rest JMeter吞吐量在达到Amazon ELB时下降,rest,jmeter,amazon-elb,Rest,Jmeter,Amazon Elb,我在Amazon的AWS服务器上托管一个web应用程序。我目前正在使用JMeter对应用程序进行负载测试。我的主要问题似乎是,当我通过弹性负载平衡器(ELB)攻击Amazon服务器而不是直接攻击服务器时,我的吞吐量似乎达到了上限 如果我直接访问我的web应用程序,对于每台服务器,我能够实现每台服务器50 RPM的吞吐量 如果我通过Amazon的ELB访问我的web应用程序,我只能实现50转/秒的最大吞吐量(总计) 我想知道是否有其他人在通过Amazon的ELB使用Jmeter进行负载测试时也经历

我在Amazon的AWS服务器上托管一个web应用程序。我目前正在使用JMeter对应用程序进行负载测试。我的主要问题似乎是,当我通过弹性负载平衡器(ELB)攻击Amazon服务器而不是直接攻击服务器时,我的吞吐量似乎达到了上限

如果我直接访问我的web应用程序,对于每台服务器,我能够实现每台服务器50 RPM的吞吐量

如果我通过Amazon的ELB访问我的web应用程序,我只能实现50转/秒的最大吞吐量(总计)

我想知道是否有其他人在通过Amazon的ELB使用Jmeter进行负载测试时也经历过类似的行为

对于更多上下文,我的web应用程序是一个REST应用程序,它允许用户通过HTTP请求下载内容(~150KB)

我使用以下标志“-Dsun.net.inetaddr.ttl=0”运行Jmeter,并使用10个线程运行它。我尝试在不同的机器上使用多个客户端运行这些测试


感谢您提前提供的帮助。

负载平衡器可能很难测试,因为它们根据来源可能具有不同的流量编排机制。最常用的方法是使用cookie来区分请求的来源并将其重定向到同一主机,该主机为以前的请求提供服务。您可以查看以正确操作cookie,并确保每个测试线程或线程组都有不同的cookie(取决于您的用例)。另一个薄弱环节是源主机IP。您可能需要将每个测试线程绑定到不同的IP地址,以便访问负载平衡器后面的不同服务器。关于Amazon LBs,DNS也可能存在一些问题。

最可能的原因是jmeter的DNS缓存。ELB返回附加服务器的IP,具体取决于自动缩放的设置方式,但JMeter不使用这些附加服务器。这个问题可以通过确保Jmeter不缓存DNS结果来解决

ELB是一个名称,而不是IP,可能会受到DNS缓存的影响。确保在启动JMeter时使用“-Dsun.net.inetaddr.ttl=0”


回答得太晚了,与原来的问题略有不同,但我希望这能帮助其他人,因为我花了一段时间才弄清楚。我最初的问题不是由于ELB而降低吞吐量,而是引入了HTTP503错误。实际上,与直接查询web应用程序相比,ELB增加了我的吞吐量,尽管即使进行了1小时的测试,结果也只是零星的

首先,ELB正在进行两阶段负载平衡。第一个负载平衡是跨越ELB本身。这是通过将多个IP地址关联到AWS为ELB you提供的主机名来实现的。当然,第二种方法是跨越ELB后面的应用程序实例

这篇文章不想冒犯诸神,但确实很有帮助

其中最有用的信息是使用JMeter中的DNS缓存管理器模块。这将查询多个DNS服务器,并清除DNS缓存

我实现了该模块,然后设置了Wireshark,对属于ELB主机名的两个IP地址进行过滤,果然,它同时查询了两个IP地址,尽管很明显它更喜欢其中一个

这并没有造成很大的区别,至少在短期测试中没有

当我调整ELB健康设置时,真正的区别(吞吐量增加了2-3倍)。起初我的错误率很高,但是在降低了不健康阈值和健康检查间隔后,我的错误率急剧下降

此外,我的其他测试都是60-90分钟,而这次是8小时。我一开始的吞吐量相当不错,然后很快就下降了(大约2/3)。大约20分钟或更长时间后,吞吐量开始回升,到测试结束时,它的吞吐量是我在没有ELB的情况下得到的吞吐量的5倍左右(这与开始测试后不久吞吐量下降时的情况类似)