我在AWS上的小型/中型机器上运行多个微服务(
Spring cloud docker),最近我发现这些机器经常耗尽并需要重新启动.
我正在研究这种断电的原因,考虑可能的内存泄漏或实例/容器上的错误配置.
我试图通过这样做来限制这些容器可以使用的内存量:
docker run -m 500M --memory-swap 500M -d my-service:latest
此时,我的服务(带有一个单一端点的标准Spring云服务,使用spring-data-redis将内容写入Redis数据库)甚至都没有启动.
将内存增加到760M并且工作正常,但是使用docker监控它我发现最小值是:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
cd5f64aa371e 0.18% 606.9 MiB / 762.9 MiB 79.55% 102.4 MB / 99 MB 1.012 MB / 4.153 MB 60
我添加了一些参数来限制JVM内存堆,但它似乎并没有减少它:
_JAVA_OPTIONS: "-Xms8m -Xss256k -Xmx512m"
我在跑
> Spring Cloud Brixton.M5
> Spring Boot 1.3.2
> Java 8(Oracle JVM)
> Docker
> Spring数据Redis 1.7.1
有这么简单的服务使用如此多的内存来运行的原因吗?是否有任何我应该禁用的功能来改进它?