即使实例处于完全健康状态,Elastic Beanstalk也会报告5xx错误

时间:2016-05-11 09:00:56

标签: amazon-web-services elastic-beanstalk locust

我需要设置一个api应用程序来收集要在推荐引擎中使用的事件数据。这是我的设置:

  • 带有负载均衡器和自动缩放组的Elastic Beanstalk env。
  • 我有2x t2.medium实例在负载均衡器后面运行。
  • EBS配置是运行Tomcat 8 Java 8的64位Amazon Linux 2016.03 v2.1.1
  • 此外,我有8x t2.micro实例,用于高负载测试api,发送数千个请求/秒由api处理。
  • 我使用Locust(http://locust.io/)作为我的负载测试工具。
  • 由Locust运行的每个t2.micro实例最多可发送约500req / sec

一切正常,而reqs / sec低于1000,可能是1200.一旦结束,我的负载均衡器报告其背后的一些实例报告了5xx错误(附加)。我还尝试在负载均衡器后面有4个实例,虽然事情开始时很快就达到3000req / sec,但很快,ebs健康工具和Locust都报告了503s和504s,而所有实例都处于完美状态根据ebs Health Overview中的实际数字,显示CPU利用率仅为10%-20%。

在配置env时我是否缺少smth?似乎无论我在负载均衡器后面有多少台机器,env每秒处理的请求数不会超过1000-2000。

enter image description here

编辑: 现在我肯定知道导致问题的是ELB,而不是实例。

我对10个模拟用户进行了负载测试。每个用户发送大约1req / sec,负载增加10个用户/秒到4000个用户,这应该等于大约4000req / sec。仍然似乎不喜欢超过3.5k req / sec的任何请求率( attachment1 )。

attachment2 可以看出,负载均衡器背后的4个实例处于完美状态,但我仍然遇到503错误。这只是负载均衡器本身导致的问题。看看SurgeQueueLength和SpilloverCount在某些时候如何快速增长。 ( attachment3 )我正在试图找出原因。

此外,我完全删除了负载均衡器,仅使用一个实例进行了测试。它可以处理高达约3k req / sec。 ( attachment4 attachment5 ),所以它绝对是负载均衡器。

也许我错过了负载均衡器默认拥有的一些关键限制,比如队列大小为1024? 1负载均衡器的正常处理率是多少?我应该添加更多负载平衡器吗?它可能与可用区有关吗?来自一个区域的ELB侦听器正在尝试从不同的区域路由到实例?

附件1: enter image description here

attachment2: enter image description here

attachment3: enter image description here

attachment4: enter image description here

attachment5: enter image description here

更新: 启用跨区域负载平衡

更新: 也许这有助于更多: enter image description here

1 个答案:

答案 0 :(得分:0)

消息说" 9.8%的ELB请求失败了HTTP 5xx(6分钟前)"。这并不意味着您的实例未返回HTTP 5xx响应。 ELB本身的请求失败了。当您的后端实例处于容量状态时(例如,连接已经饱和,并且它们拒绝与ELB的连接),就会发生这种情况。

你的要求在ELB蔓延。他们永远不会成为实例。如果他们在EC2实例上失败,那么原因将会有所不同,环境数据将与实例的数据相匹配。

另请注意,原因是这是国家" 6分钟前"。 Elastic Beanstalk多个数据源 - 一个是来自实例的数据,显示每秒的请求数和所示表中的HTTP状态代码。另一个数据源是ELB的cloudwatch指标。由于ELB的云观察指标是1分钟,因此这些数据会稍微延迟,原因会告诉您信息的年龄。