美文网首页云计算
在Docker Compose file 3下限制CPU与内存

在Docker Compose file 3下限制CPU与内存

作者: gurlan | 来源:发表于2020-02-29 17:49 被阅读0次

在Docker Compose file 3下限制CPU与Memory

最近在研究elastich,容器运行没有限制内存,导致服务器内存被沾满,导致mysql被杀掉,出现事故。

基本环境说明

1.macOS Mojave 10.14.5
2.docker 18.09.2
3.docker-compose version 1.23.2,build 1110ad01
4.docker-compose.yml

用来模拟cpu冲高的container

version:“3”
services:
redis:
      image: redis:alpine
     container_name: testredis

模拟CPU飙高

1.使用docker-compose启动container

进到docker-compose.yml的所在文件夹位置执行下列数据

docker-compose up -d

2.进行该conatiner中让cpu飙高

docker exec -it testredis sh
for i in $(seq `grep -c ^proc /proc/cpuinfo`);do(yes > /dev/null &);done

3.确认设定

使用docker inspect testredis | grep Cpu检查container相关设定


image.png

4.实际效果

透过docker stats testredis监控container的使用量可以看到cpu从0.33%直线上升至超过300%


image.png

加入CPU限制

1.修改yml
1.1version改用3.7
1.2加入deploy的resource limit

version: "3.7"
services:
  redis:
    image: redis:alpine
    container_name: testredis
    deploy:
      resources:
        limits:
          cpus: '0.50'

2.启动container时加入--compatibility参数
docker-compose --compatibility up -d
2.1启动时未加入-compatibility的警告

WARNING: Some services(redis)use the 'deploy' key,which will be ignored.Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.

3.确认设定

使用docker inspect testredis | grep Cpu检查container相关设定,可以看到NanoCpu = 500000000(1000000000 * 0�.5)


image.png

4.实际效果

透过docker stats testredis监控container的使用量可以看到cpu从0.3%上升至50%左右就不再上升


image.png

心得

同场加映memory限制

version: "3.7"
services:
  redis:
    image: redis:alpine
    container_name: testredis
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 500M

--compatibility是docker-compose 1.20.0加入,主要目的就是用来将deploy中的数据限制、replicas与重启策略直接转译为version 2的语法


image.png

虽然只是一个小小参数,但却透露出其实我对docker-compose的不熟悉,花了一点时间才找到,幸亏亡羊补牢,没有继续错下去.

相关文章

网友评论

    本文标题:在Docker Compose file 3下限制CPU与内存

    本文链接:https://www.haomeiwen.com/subject/sclmhhtx.html