AWS ECS Fargate 容器停止运行且没有错误

问题描述 投票:0回答:1

我的 AWS ECS Fargate 设置遇到问题,我正在寻求一些指导。我设置了一个用于网络抓取的容器,该容器通常运行大约 2-5 小时,然后神秘地停止,日志中没有任何错误。我最初相信集群、任务定义和任务配置正确,但现在我不完全确定。

以下是一些要点:

任务行为:容器平稳运行一段时间,然后停止显示日志。我可以确认该程序已停止,因为数据库没有发生进一步的更新。

任务状态:有趣的是,即使没有生成日志,任务状态仍保持为“RUNNING”。

日志和错误:令人惊讶的是,当容器停止时,日志中没有报告任何错误。就好像程序突然停止了。

资源利用率:我考虑了 CPU 或内存问题,但 Container Insights 显示我没有达到预留限制。此外,当程序停止显示日志时,CPU 使用率下降到接近 0。

我最初怀疑代码中存在潜在的错误,但是当我在本地运行容器时,它成功执行直到完成。

我对可能导致这种意外行为的原因感到有点困惑。如果有人对我的 ECS Fargate 设置或潜在问题有见解或建议,我将非常感谢您的帮助!请随时询问有关我的配置的更多详细信息。

非常感谢!

amazon-web-services cloud amazon-ecs aws-fargate
1个回答
0
投票

我刚刚花了几周的时间诊断了我维护的 Fargate 服务的一个听起来类似的问题,尽管很难说根本原因是否与您的相同。

基本上,结果是内存问题。当 Fargate 任务接近内存上限时(根据 Container Insights 指标,使用了 512 MB 内存中的大约 414 MB,即 81%),任务中的所有内容都会变得非常慢,但实际上并没有停止或崩溃。这种缓慢程度足以完全阻止 Datadog 代理和 awslogs 驱动程序报告任何日志,这就是日志记录似乎突然无缘无故停止的原因。我最好的猜测是,fargate 任务的虚拟机正在进入“分页地狱”状态,这导致速度极其缓慢。

我只能通过在服务器中设置一个简单的计时器任务来确认容器实际上仍在运行,该任务向我也维护的另一个不相关的服务发出简单的 HTTP 请求。我可以在其他服务的 HTTP 日志中看到,在日志记录中断期间,请求仍在传入,尽管速度比正常情况慢得多。

最终,我将 Fargate 任务的内存限制从 512 MB 提高到 1024 MB,问题神奇地消失了。但即使是现在,Container Insights 的“内存利用率”也从未超过 43%(如果内存使用确实是以前的问题,我预计至少会偶尔看到超过 50% 的峰值)。

所以基本上,我认为 Container Insights 报告的“内存利用率”百分比存在某种问题,其中 Fargate 任务的实际内存限制约为 82%,而不是您期望的 100%(至少在为任务使用 512 MB 内存限制时)。这就是为什么这如此令人困惑并且花了我很长时间才弄清楚的原因;它看起来并不接近内存上限,这导致我过早地排除内存使用作为可能的罪魁祸首。也许 Container Insights 未能考虑主机操作系统消耗的内存?

© www.soinside.com 2019 - 2024. All rights reserved.