跳至内容

如何解决 ECS 响应时间长的问题?

1 分钟阅读
0

我想通过我的 Amazon Elastic Container Service (Amazon ECS) 任务解决响应时间长和延迟高的问题。

解决方法

检查您的 Amazon ECS 服务级别指标

更高的 CPU 和内存利用率会导致 Amazon ECS 任务的响应延迟过高。使用 Amazon CloudWatch 指标查看服务级别 CPU 和内存利用率。如果您已激活 CloudWatch Container Insights,请检查容器级别 CPU 和内存利用率。如果未激活 Container Insights,请参阅如何配置 CloudWatch Container Insights 来监控我的 Amazon ECS 任务和容器实例?

如果应用程序的容器必须执行 CPU 密集型工作负载,请升级到更大的任务大小,包括更多的虚拟 CPU (vCPU) 和内存。或者,开启 Application Auto Scaling

Amazon EC2 启动类型中的 Amazon ECS 任务

检查使用 Amazon EC2 启动类型的 Amazon ECS 任务的 Amazon Elastic Cloud Compute (Amazon EC2) 实例的 CPU 和内存利用率。

使用 CloudWatch 指标监控 Amazon EC2 实例的网络性能。如果实例网络带宽超过可用实例基准带宽,请使用基准带宽高的更大实例类型。

使用 CPUUtilization CloudWatch 指标监控实例 CPU 利用率。此外,登录您的实例以检查内存利用率。如果 CPU 或内存利用率很高,请向集群添加更多实例,以便在多个实例之间分配任务。或者,将该实例更改为更大的实例类型。

检查应用程序日志,以确定下游服务的响应延迟是否过高。最佳做法是激活 AWS X-Ray 以解决延迟问题

测量响应延迟

如果 Amazon ECS 服务位于应用程序负载均衡器之后,请使用 TargetResponseTime CloudWatch 指标测量响应时间。该指标提供通过应用程序负载均衡器路由的请求的平均响应时间。如果值很高,则后端应用程序或基础设施可能会出现延迟。

要直接从容器测量响应延迟,请登录到应用程序容器。对于 Amazon EC2 启动类型任务,运行 Docker exec -it container id 命令登录容器。对于使用 Fargate 启动类型的任务,使用 ECS exec 登录容器。

然后,运行以下命令来测量响应延迟:

curl -kso /dev/null -w "\n===============\n
| Connect: %{time_connect}\n
| App connect: %{time_appconnect}\n
| Pre-transfer: %{time_pretransfer}\n
| Time to First Byte (TTFB): %{time_starttransfer}\n
| Total: %{time_total}\n
| HTTP Code: %{http_code}\n===============\n" http://localhost:port/endpoint

**注意:**将 port 替换为您的容器端口,将 endpoint 替换为您的端点。

在前面命令的输出中,首字节时间 (TTFB) 字段显示了第一个字节到达所需的时间。输出还包括服务器处理时间。如果处理时间过长,则应用程序需要更长的时间来处理请求。

相关信息

如何排查 AWS Fargate 上 Amazon ECS 任务的 CPU 使用率较高的问题?

如何监控 Fargate 上 Amazon ECS 任务的高内存利用率?

如何计算我的 EC2 实例的总网络使用量,并确定在某个日期范围内哪个实例消耗的带宽最多?

AWS 官方已更新 10 个月前