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

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

我已经为每个docker分配了512mb的内存大小和性能问题。 我注意到,当服务器获得更多的请求(如20%,23%,45%…)和负载时,CPU使用率增加,然后自动降到正常状态(0.88%)。 但是,每次请求的内存使用量都在不断增加,即使CPU使用率达到正常阶段,仍然无法释放未使用的内存,并且达到了100%,而且docker自己被杀死并重新启动。

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

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

请给我们一个解决scheme/方法来尽快解决这些问题,因为这是我们的一个非常关键的问题?

CloudWatch本身不会报告内存统计信息。 但是,Amazon提供了一些脚本(通常被称为“Linux的CloudWatch Monitoring Scripts”),可以将统计信息导入CloudWatch,以便您可以使用这些指标构build扩展策略。

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

然而,这又会带来另外一个警告,那就是你不能使用原生的Docker部署JSON,因为它不会select.ebextensions文件夹(请参阅Dockerrun源包中的AWS Elastic Beanstalk Docker部署中的哪个位置放置ebextensionsconfiguration? 这里的解决scheme是创build一个包含JSON文件和.ebextensions文件夹的应用程序的zip文件, .ebextensions其用作部署工件。

还有一件事我不清楚,那就是如果这些指标可以在应用程序的configuration – >缩放部分下select。 您可能需要创build另一个.ebextensionsconfiguration文件来设置自定义指标,例如:

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

现在,即使这样做,如果应用程序在缩放和负载下降后不会降低其内存使用量,那么扩展策略将会持续触发并最终达到最大值。

我首先看看是否可以为JVM获取一些垃圾收集统计信息,并可能调整JVM以更频繁地执行垃圾收集,以便在应用程序加载closures后更快地将内存降低。