【发布时间】:2018-07-29 12:36:44
【问题描述】:
我们最近将 .net4.6 WEB API 迁移到 netcoreapp2.0 我们正在使用 AWS ECS docker 容器来部署我们的服务。
短时间负载测试工作正常。 但长时间运行的负载测试表明 docker 容器回收时出现错误代码 137。
在整个负载测试期间,内存和 CPU 利用率均正常 ~30 %。
由于错误 137 与内存相关,因此已尝试以下修复。
- 已更改垃圾收集模式:
真 true
- 已迁移到 netcore 2.0.3,因为它对内存管理进行了一些修复。
FROM microsoft/dotnet:2.0.3-runtime
- 已配置 cgroup,如下是 docker 日志中的一些错误
cgroup: docker-runc (3365) 为具有不完整层次结构支持的控制器“内存”创建了嵌套 cgroup。嵌套的 cgroup 将来可能会改变行为。 [23.104548] cgroup:“内存”需要在根目录上将 use_hierarchy 设置为 1
我们的 ECS 任务配置如下:
- 正在运行的任务数:2 on 2 C4.xlarge EC2 在 ECS 后面。
- 内存软限制:2 Gb
- 还验证了我们的 Healthcheck 端点,它没有任何问题并且响应速度很快。甚至尝试用 200 Ok 对 healthcheck 进行硬编码
一些 Docker 日志:(注意 OOM 被杀死是假的,即使没有内核级别的日志。)
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2018-02-12T06:15:00.481719209Z",
"FinishedAt": "2018-02-12T07:13:02.962733905Z"
},
如果我们直接在 docker 容器 ip 和端口上运行负载测试,会发现一些奇怪的现象。他们工作得很好。如果我们通过 ALB 运行它们,则会观察到崩溃行为。
请让我知道任何其他 linux 命令,这些命令可以为我提供进程终止的实际原因或上述情况的任何可能的修复。
【问题讨论】:
-
它对你有用吗?我现在正面临这个问题,如果你能解决它,请告诉我
-
经过多次尝试,我让我的开发人员在 AWS ECS 上从头开始创建 Docker 集群。之后它停止发生。我只是幸运或不确定以前的集群中是否存在任何配置问题。
标签: docker asp.net-core-2.0 amazon-ecs