24 Jul 2020
free -h和top显示的是宿主机的资源而不是容器的资源docker -m 100m会分配100m内存和100m swap空间,所以一共给程序200m的内存空间(当然,你可以手动用-memory-swap指定swap空间大小)为了解决上面提到的问题,无论用什么方式,其实都是集中在如何给JVM传入内存限制的参数,而不是采用JVM的默认值(不同jdk版本,不同策略)
version 3中使用resources替代了之前的资源限制选项。version 3对于resources limit的实现增加了几个限定条件,1. 只能在docker stack或者swarm模式启动;2. 只能限制cpu和mem这两项。如果想在docker-compose上使用resource limit,只能选择退回到version2.1或者使用--compatibility。
version: "3.8" services: redis: image: redis:alpine deploy: resources: limits: cpus: '0.50' memory: 50M reservations: cpus: '0.25' memory: 20M
docker-compose - deploy - resources
v3版本的
--compatibility解决非swarm模式的不生效问题
reservations意味着硬性的保留这些资源,专用于这个容器;limits意味着容器申请的资源,不能超过这个限制。