- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在为我们的 spring webflux java 11 微服务使用 AWS Fargate ECS 任务。我们正在使用 FROM gcr.io/distroless/java:11 java 图像。当我们的应用程序在本地 docker 化并作为镜像部署在 docker 容器中时,内存利用率非常高,我们可以看到堆使用率永远不会超过 50%
然而,当我们在 AWS Fargate 中使用相同的 dockerfile 部署相同的图像作为 ECS 任务时,AWS Dashbaord 显示完全不同的画面。内存利用率从未下降,Cloudwatch 日志根本没有显示内存不足问题。在 AWS ECS 中,部署后我们进行了峰值负载测试、压力测试,之后内存利用率达到 94%,然后进行了 6 小时的浸泡测试。内存利用率仍然是 94%,没有任何 OOM 错误。内存垃圾收集不断发生,不让应用程序 OOM。但它保持在 94%
为了在本地测试应用程序的内存利用率,我们使用 Visual VM。我们还尝试使用 Amazon ECS Exec 连接到 AWS Fargate 中的远程 ECS 任务,但正在进行中
我们和其他集群中的其他微服务也遇到了同样的问题。一旦达到最大数量,它就永远不会下降。如果有人之前遇到过同样的问题,请提供帮助
2022 年 10 月 10 日编辑:我们使用 Amazon ECS Exec 连接到 AWS Fargate ECS 任务,结果如下所示
我们分析了 AWS ECS Fargate 任务的 GC 日志,可以看到消息。它使用默认 GC,即简单 GC。我们不断收到“Pause Young Allocation Failure”,这意味着分配给新生代的内存不足,因此 GC 失败。
[2022-10-09T13:33:45.401+0000][1120.447s][info][gc] GC(1417) 暂停完全(分配失败)793M->196M(1093M) 410.170ms[2022-10-09T13:33:45.403+0000][1120.449s][info][gc] GC(1416) Pause Young (Allocation Failure) 1052M->196M(1067M) 460.286ms
我们做了一些与字节数组相关的代码更改,在内存中复制了两次,内存确实下降了,但下降幅度不大
/app # ps -o pid,rss
PID RSS
1 1.4g
16 16m
30 27m
515 23m
524 688
1655 4
/app # ps -o pid,rss
PID RSS
1 1.4g
16 15m
30 27m
515 22m
524 688
1710 4
即使在像下面这样的完整 gc 之后,内存也不会下降:
2022-10-09T13:39:13.460+0000][1448.505s][info][gc] GC(1961) Pause Full (Allocation Failure) 797M->243M(1097M) 502.836ms
一个重要的观察是在运行 inspect heap 之后,触发了一个完整的 gc,甚至没有清除内存。它显示 679M->149M 但 ps -o pid,rss 命令不显示丢弃, AWS Container Insights 图
2022-10-09T13:54:50.424+0000][2385.469s][info][gc] GC(1967) 完全暂停(堆检查启动的 GC)679M->149M(1047M) 448.686ms[2022-10-09T13:56:20.344+0000][2475.390s][info][gc] GC(1968) Pause Full (Heap Inspection Initiated GC) 181M->119M(999M) 448.699ms
最佳答案
你是如何在本地运行它的?你是否为你启动的容器设置了任何参数(cpu/内存)?在 Fargate 上有多个级别的资源配置(任务大小和您分配给容器的资源量 - 查看 this blog 了解更多详细信息)。另外要考虑的另一件事是,使用 Fargate,您可能会登陆一个容量 >> 容量大于您配置的任务大小的实例。 Fargate 将创建一个 cgroup,它将您的容器装箱到该大小,但一些旧程序(和 java 版本)不支持 cgroup,它们可能假设您拥有的内存量是实例上可用的内存(您看不到)而不是配置的任务大小(和 cgroup)。
我没有确切的答案(这不适合发表评论)但这可能是您可以探索的领域(能够执行到容器中应该会有所帮助 - ECS exec 非常适合)。
关于spring-webflux - AWS ECS Fargate 内存利用率与本地 Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73914579/
尽管我的 EC2 实例(带有针对 ECS 优化的 AIM)正在运行 ecs 代理,但容器并未在我的 EC2 中启动。为了确认 ecs-agent 正在我的 EC2 实例上运行,我检查了: ecs 日志
我想在一个任务定义中使用客户端和服务器在 aws ecs 中运行套接字程序。当我使用 awsvpc 网络模式并每次连接到本地主机上的服务器时,我都可以运行它。这很好,所以我不需要知道服务器的 IP 地
我有一个在 AWS ECS 上运行的 Docker 容器。我不想要负载均衡器,因为容器是用来处理 websocket 连接的。 https://aws.amazon.com/getting-start
我想在我的 AWS ECS/Fargate 集群上的公共(public) Docker 镜像中启动交互式 shell,以便从集群内部运行网络/连接测试。 似乎官方的方法是使用 aws ecs run-
我在 ECS Fargate 上托管了一个 Shiny 的应用程序。它运行得相当好,但偶尔在使用该应用程序时它会崩溃。我在事件选项卡中将其追溯到以下内容: service YYYY has start
在 AWS ECS 中创建容量提供程序时。我们正在填充的值 Target capacity %,在超过这个值后我们的集群缩小,但我很好奇当前集群的这个值是如何计算的,如果我想检查当前的是什么集群的值(
在 AWS ECS 中创建容量提供程序时。我们正在填充的值 Target capacity %,在超过这个值后我们的集群缩小,但我很好奇当前集群的这个值是如何计算的,如果我想检查当前的是什么集群的值(
我在 AWS 上设置了具有多个目标组和应用程序负载均衡器的 Fargate ecs 服务。它按预期运行。 然后我尝试使用本教程设置管道 https://docs.aws.amazon.com/Amaz
我有一个运行任务的 ECS 集群服务,可以使用 AWS 控制台查看其 Cloudwatch 日志流。 如何为 awslogs-stream-prefix 设置日期,因为我想按日期识别日志流。 "c
我正在使用两个容器部署 ECS Fargate 任务:1 个反向代理 nginx 和 1 个 python 服务器。对于每个我有一个 ECR 存储库,我有一个 CI/CD CodePipeline 设
我在 AWS ECS 上部署了一个 CloudFormation 堆栈,比如 teststack , 通过命令 aws cloudformation deploy --template-file ./
我这里有一些具体的用例。我需要自动扩展在 ECS Fargate 上运行的分布式 Web 应用程序。问题是所有节点都需要在内存中保留相同的数据(因此增加节点数量无助于内存压力)。因此,只有在水平(添加
我正在寻找有关为 ECS 任务分配内存的指南。我正在为希望在服务器成本上尽可能便宜的客户运行 Rails 应用程序。我正在查看具有 2 个 CPU 和 4 GB 内存的中等服务器大小。 大多数情况下,
我是 ECS 新手,我正在尝试使用 Cloudformation 部署它。 我通过查看文档以及从博客和一些文章中找到的一些示例来制作以下 cloudformation 模板。 但是,由于某种原因,它在
也许这很愚蠢,但如果我创建一个 ECS 任务定义(例如参见 https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aw
ECS 的容器定义允许您指定 memoryReservation对于每个容器: The soft limit (in MiB) of memory to reserve for the contain
我在 ca-central 区域创建了一个 AWS ECS 实例。它与每次更新服务时都会更改的动态公共(public) ip 一起使用。到目前为止一切都很好。 由于需要一个公网静态IP,所以我在同一区
Invalid 'containerPort' setting for container 'prerenderContainer'.(Service: AmazonECS; Status Code:
如果我在 ECS 服务级别进行自动扩展,我看不到使用容量提供程序扩展 ECS 集群的意义: https://docs.aws.amazon.com/AmazonECS/latest/developer
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 想改进这个问题?更新问题,使其成为 Stack Overflow 的 on-topic。 1年前关闭。
我是一名优秀的程序员,十分优秀!