You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取运行中Fargate ECS任务的内存转储以排查内存占用过高问题

获取运行中AWS Fargate ECS任务dotnet core应用内存转储方案

前置配置要求

  • ECS任务定义需开启executeCommand功能,对应任务执行角色需附加包含以下权限的策略:
    • ssmmessages:CreateControlChannel
    • ssmmessages:CreateDataChannel
    • ssmmessages:OpenControlChannel
    • ssmmessages:OpenDataChannel
  • 本地环境需安装AWS CLI v2及session-manager-plugin插件
  • 业务Docker镜像需预装dotnet-dump全局诊断工具,可在Dockerfile中添加如下构建逻辑:
# 安装dotnet全局诊断工具
RUN dotnet tool install -g dotnet-dump
ENV PATH="$PATH:/root/.dotnet/tools"

注意:如果你的dotnet应用运行在非root用户下,需要确保对应用户拥有dotnet-dump的执行权限,以及转储文件存储路径的写入权限

生成内存转储操作步骤

  1. 提前记录目标Fargate任务所属集群名称、任务ID、对应容器名称
  2. 使用ECS Exec命令进入运行中的容器:
    aws ecs execute-command --cluster <替换为你的集群名> --task <替换为目标任务ID> --container <替换为容器名> --command "/bin/sh" --interactive
  3. 进入容器后执行以下命令获取dotnet应用的进程ID:
    dotnet-dump ps
  4. 对目标进程生成内存转储文件:
    dotnet-dump collect -p <替换为上一步获取的进程ID> -o /tmp/ecs-fargate-mem-dump.dmp

提示:生成转储文件的过程会短暂占用额外内存,请尽量在内存占用未达到容器资源限制阈值时操作,避免任务被系统OOM终止

导出转储文件到本地

Fargate不支持直接从容器下载文件,可选择以下两种方案导出:

  • 方案1:在容器内安装AWS CLI,将生成的.dmp文件上传到有权限的S3存储桶,再从S3控制台/CLI下载到本地
  • 方案2:通过会话管理的端口映射能力,使用nc等工具完成文件跨端传输

转储分析

下载到本地的转储文件可直接使用JetBrains dotMemory、Visual Studio等工具打开,和本地运行时的内存分析逻辑完全一致,可直接对比本地、线上的内存对象分布、GC根引用、未释放资源等数据,定位两地运行环境的内存差异原因

内容的提问来源于stack exchange,提问作者Subramanya Adiga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:45:07