增加 AWS Elastic Beanstalk 实例大小或增加负载均衡器是否有助于减少随机 502 Nginx 错误?

Will Increasing AWS Elastic Beanstalk Instance Size or Increasing Load Balancers Help Reduce Random 502 Nginx Errors?

我最近向我的 Elastic Beanstalk 应用程序添加了一个 CPU 密集型 20MB+ 图像 decoding/parsing 函数,并注意到有时(约 10% 的时间)要么调用该函数本身,要么随后,对应用程序的不相关请求导致 502 错误,来自 Nginx,而不是应用程序本身:

[09/Oct/2020:01:51:06 +0000] "GET /plaid/eoinfoinwfe HTTP/1.1" 502 157 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit

我的 Elastic Beanstalk 实例是 t2.small 运行 Docker running on 64bit Amazon Linux 2/3.2.0 OS,我的负载均衡器看起来像:

Listeners: 2
Load balancer type: application
Processes: 1

切换到更大的实例大小或增加我的负载均衡器的进程是否有助于减轻我看到的 502 错误?

评论中的附加信息表明 CPU 利用率很高 (80%)。这是有问题的,因为 t2.small 个实例是 突发 并且只有 1 vCPU。因此,一旦 EB 实例长时间忙于处理图像,您不仅可能会消耗所有 CPU,从而导致该实例上的其他进程无法高效工作,还可能耗尽其 CPU 积分,进一步影响其性能。

您可以尝试更改为具有 2 个 vCPU 的 t2.medium 并将其设置为 unlimited mode 以克服其 CPU 信用限制。但是由于您的任务是 CPU 密集型任务,也许最好从通用实例 t2 切换到 计算优化 的 C5 系列。这样您就不必担心任何 CPU 积分,但显然它们的成本更高。相比之下,t2.small 有 1 个 CPU,时钟为 2.5GHz,而 c5.large 有 2 个 CPU,时钟为 3.4 GHz。