2016-05-11 18 views
1

我需要設置一個用於收集要在推薦引擎中使用的事件數據的api應用程序。這是我的設置:即使實例處於完美狀態,Elastic Beanstalk也會報告5xx錯誤

  • 帶有負載平衡器和自動調節組的Elastic Beanstalk env。
  • 我有2個t2.medium實例在負載平衡器後面運行。
  • EBS配置是64位Amazon Linux 2016.03 v2.1.1運行Tomcat 8 Java 8
  • 此外,我有8x t2.micro實例,我用於高負載測試API,發送數千請求/秒處理api。
  • 使用Locust(http://locust.io/)作爲我的負載測試工具。
  • 由蝗蟲運行每個t2.micro實例可以一旦發送多達約500req /秒,同時請求數/秒低於1000

一切正常,也許1200以上,我的負載平衡器報告它背後的一些實例報告了5xx錯誤(附後)。我也嘗試了負載平衡器後面的4個實例,儘管事情起步良好,但不久之後,ebs健康工具和Locust都報告了503s和504s,而所有實例都處於完美狀態根據ebs健康概覽中的實際數字,僅顯示10%-20%的CPU利用率。

在配置env時我缺少smth嗎?看起來無論負載平衡器後面有多少臺機器,env每秒處理的請求數不超過1000-2000個。

enter image description here


編輯: 現在我肯定知道這是導致該問題,而不是實例ELB。

我跑了10個模擬用戶的負載測試。每個用戶發送約1req/sec,負載以每用戶10個用戶增加到4000個用戶,這應該等於大約4000req/sec。儘管如此,它似乎並不像任何請求率超過3.5k /秒(附件1)。

正如你可以從附件2看到的,負載均衡器後面的4個實例處於完美狀態,但我仍然不斷收到503錯誤。這只是負載平衡器本身導致的問題。看看SurgeQueueLength和SpilloverCount如何在某個時候迅速增加。 (附件3)我想弄明白爲什麼。

此外,我完全刪除負載平衡器,並只用一個實例進行測試。它可以處理高達約3k的需求/秒。 (附件4附件5),所以它絕對是負載平衡器。

也許我錯過了默認情況下負載均衡器的一些關鍵限制,如隊列大小爲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


UPDATE: 跨區域負載均衡啓用


UPDATE: 也許這有助於更多: enter image description here

回答

0

的消息說,「這些要求與ELB的9.8%與HTTP 5xx(6分鐘前)失敗「。這並不意味着你的實例沒有返回HTTP 5xx響應。 ELB本身的請求失敗。這可能發生在您的後端實例處於滿負荷狀態時(例如,連接已飽和並且拒絕與ELB的連接)。

您的請求正在ELB泄漏。他們從來沒有做到這一點。如果它們在EC2實例上失敗,那麼原因將會不同,並且環境的數據將與實例的數據相匹配。

另請注意,原因說這是「6分鐘前」的狀態。 Elastic Beanstalk多個數據源 - 一個是來自實例的數據,它顯示每秒的請求數和HTTP狀態碼。另一個數據源是您的ELB的cloudwatch指標。由於ELB的cloudwatch指標爲1分鐘,因此這些數據會稍微延遲,原因會告訴您信息的年齡。

+0

hi Rohit。感謝您的支持。我添加到我的帖子。看一看。 –

+0

你可以嘗試打開你的環境的CrossZone負載平衡嗎? http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html –

+0

它是。更新的評論。 –

相關問題