当前位置: 首页 > 知识库问答 >
问题:

AWS EB应在我的docker达到其最大内存限制后创建新实例

沃楷
2023-03-14

我使用弹性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)时,如何设置自动缩放来创建另一个实例?

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

共有1个答案

缑修齐
2023-03-14

CloudWatch不报告内存统计信息。但是Amazon提供了一些脚本(通常称为“CloudWatch Monitoring scripts for Linux”),可以将统计数据输入CloudWatch,这样您就可以使用这些度量标准构建一个缩放策略。

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

但是,这将带来另一个警告,即您不能使用本机Docker部署JSON,因为它不会拾取.ebextensions文件夹(请参见在AWS弹性Beanstalk Docker deploy with dockerrun source Bundle中放置ebextensions config的位置?)。这里的解决方案是创建应用程序的zip,其中包括JSON文件和.ebextensions文件夹,并将其用作部署工件。

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

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

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

首先,我想看看您是否可以为JVM获取一些垃圾收集统计信息,并可能优化JVM以更经常地进行垃圾收集,以便在应用程序负载下降后更快地降低内存。

 类似资料:
  • 我正在尝试为一个大图像(8200x11800像素)创建一个缩略图,所以GD不是一个选项。我被告知Imagick将通过使用磁盘空间而不是ram内存来克服内存限制,因此我安装了它,并按照如下方式重写了mi脚本: 但我仍然得到没有消息,就像以前发生在GD内存不够时一样,任何想法?谢啦 BTW设置为512 MB,在这里您可以获取原始图像文件。

  • 本文向大家介绍jvm最大内存限制多少?相关面试题,主要包含被问及jvm最大内存限制多少?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JVM (1)堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小 于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到

  • 这是我的用户名正则表达式,我想应用限制,只允许3个字符的最小值和15个字符的最大值。 此正则表达式验证低于标准 用户名可以由小写和大写组成 用户名可以由字母数字字符组成 用户名可以由下划线和连字符组成 不能是两个下划线、两个加高或两个空格 开头或结尾不能有下划线、hypen或空格

  • 问题内容: 我需要在Java中编写一个算法(对于android应用程序)来读取包含更多文件夹的文件夹,以及每个包含图像和音频文件的文件夹,因此结构如下: 我的问题是我需要将档案的大小限制为16mb,并且在运行时,根据需要创建尽可能多的档案,以包含主文件夹中的所有文件。 我从网上尝试了几个示例,并阅读了Java文档,但是我无法理解并按照需要的方式将它们放在一起。有人以前做过这个吗,或者有一个链接或一

  • 问题内容: 对于我的应用程序,Java进程使用的内存远远大于堆大小。 容器运行所在的系统开始出现内存问题,因为容器占用的内存比堆大小大得多。 堆大小设置为128 MB(-),而容器最多占用1GB的内存。正常情况下需要500MB。如果docker容器的限制低于(例如),则该进程将被操作系统的内存不足杀手杀死。 你能解释一下为什么Java进程使用的内存比堆多得多吗?如何正确调整Docker内存限制的大

  • 问题内容: 带有 Windows的Docker桌面的Docker Windows容器是否具有默认内存限制?我有一个在容器中运行时崩溃的应用程序,但是当我尝试为命令指定参数时,它似乎运行良好。至少在以前崩溃的情况下。这给我的印象是有默认的内存限制,但是我在文档中找不到它。所以我的问题是是否存在内存限制,并且是否在记录的地方? 问题答案: 根据关于Windows的Docker Github问题的讨论(