gpt4 book ai didi

scala - 一旦我的 docker 达到其最大内存限制,AWS EB 应该创建新实例

转载 作者:行者123 更新时间:2023-12-02 18:15:52 25 4
gpt4 key购买 nike

我已经使用 Elastic Beanstalk 在 AWS 服务器中部署了我的 dockerized 微服务,它是使用 Akka-HTTP( https://github.com/theiterators/akka-http-microservice ) 和 Scala 编写的。

我为每个 docker 和性能问题分配了 512mb 的内存大小。我注意到当服务器收到更多请求(如 20%、23%、45%...)时 CPU 使用率会增加并且取决于负载,然后它会自动降到正常状态(0.88%)。但是每次请求的内存使用量都在不断增加,即使在 CPU 使用率达到正常阶段并达到 100% 并且 docker 自行杀死并重新启动后,它也未能释放未使用的内存。

我还在 EB 中启用了自动缩放功能来处理大量请求。因此,只有在运行实例的 CPU 使用率达到最大值后,它才会创建另一个重复实例。

一旦内存使用量达到其最大限制(即 512mb 中的 500mb),我如何设置自动缩放以创建另一个实例?

请尽快为我们提供解决这些问题的解决方案/方法,因为这对我们来说是一个非常关键的问题?

最佳答案

CloudWatch 本身不会报告内存统计信息。但是 Amazon 提供了一些脚本(通常简称为“Linux 的 CloudWatch 监控脚本”),它们会将统计信息输入 CloudWatch,以便您可以使用这些指标来构建扩展策略。

Elastic Beanstalk 文档提供了一些有关在 Linux 平台上安装脚本的信息,地址为 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-cw.html。 .

但是,这将带来另一个警告,即您不能使用 native Docker 部署 JSON,因为它不会获取 .ebextensions。文件夹(见 Where to put ebextensions config in AWS Elastic Beanstalk Docker deploy with dockerrun source bundle?)。这里的解决方案是创建一个包含 JSON 文件和 .ebextensions 的应用程序的 zip。文件夹并将其用作部署工件。

还有一件事我不清楚,那就是这些指标是否可以在应用程序的 Configuration -> Scaling 部分下选择。您可能需要创建另一个 .ebextensions配置文件来设置自定义指标,例如:

option_settings:
aws:elasticbeanstalk:customoption:
BreachDuration: 3
LowerBreachScaleIncrement: -1
MeasureName: MemoryUtilization
Period: 60
Statistic: Average
Threshold: 90
UpperBreachScaleIncrement: 2

现在,即使这可行,如果应用程序在扩展和负载下降后不会降低其内存使用量,那么扩展策略将继续触发并最终达到最大实例。

我首先会看看您是否可以获得 JVM 的一些垃圾收集统计信息,并可能调整 JVM 以更频繁地进行垃圾收集,以帮助在应用程序负载下降后更快地降低内存。

关于scala - 一旦我的 docker 达到其最大内存限制,AWS EB 应该创建新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43853605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com