一旦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另一个.ebextensions
configuration文件来设置自定义指标,例如:
option_settings: aws:elasticbeanstalk:customoption: BreachDuration: 3 LowerBreachScaleIncrement: -1 MeasureName: MemoryUtilization Period: 60 Statistic: Average Threshold: 90 UpperBreachScaleIncrement: 2
现在,即使这样做,如果应用程序在缩放和负载下降后不会降低其内存使用量,那么扩展策略将会持续触发并最终达到最大值。
我首先看看是否可以为JVM获取一些垃圾收集统计信息,并可能调整JVM以更频繁地执行垃圾收集,以便在应用程序加载closures后更快地将内存降低。
- 可以在AWS Elastic Beanstalk的Docker中设置–insecure-registry属性
- 为什么我得到docker / aws eb上的权限被拒绝?
- AWS Elastic Beanstalk更改已加载目录的权限
- Amazon CloudWatch的Elastic Beanstalk Docker
- Elastic Beanstalk CLI,我如何使用RDS实例创build环境?
- Docker-Compose Up Works但Eb Local Run不行
- 如何自定义Elastic Beanstalk上的docker run命令?
- 与Docker的ElasticBean:如何使用aws cli的create-environment
- 使用Spinnaker从dockerhub部署Docker镜像到Aws Eb