介绍
介绍
福哥在搭建TFLinux的Dockerfile版本的环境的时候遇到了一个问题,虽然一些服务可以通过scale继续动态扩容,但是持久化的服务却不能这样操作,福哥想为服务设置分配的内存上限应该怎么办呢?
CPU
cpuset-cpus
通过cpuset-cpus设置可以使用的CPU的核心,例如:一个4核心的CPU,就会有0、1、2、3四个核心可以使用。
可以设置从服务器全部内核中的任意核心,例如:福哥的虚拟机有4核心,福哥用了第0、1、3三个核心。
docker run -tid --name test -h test --cpuset-cpus="0,1,3" centos
如果是生产服务器的CPU的话内核会比较多,可以设置一个范围,例如:福哥设置了6~8之间的三个核心。
docker run -tid --name test -h test --cpuset-cpus="6-8" centos
cpuset-mems
通过cpuset-mems设置NUMA架构的CPU的内存使用。
使用节点0、1、3上的内存。
docker run -tid --name test -h test --cpuset-mems="0,1,3" centos
使用6~8之间节点上的内存。
docker run -tid --name test -h test --cpuset-mems="6-8" centos
cpus
通过cpus设置一个小数,来表示我们要使用的CPU的最大限制,这个小数的区间为0.01~[最大核心数]。
设置CPU最大使用限制为2.5个核心。
docker run -tid --name test -h test --cpus=2.5 centos
cpu-period & cpu-quota
使用配额方式分配CPU给容器,这里面需要一对参数,cpu-period设置评估周期,cpu-quota设置配额,cpu-quota/cpu-period为实际分配的CPU量,这个商是小数就表示分配的CPU量不足一个vCPU,如果商大于1就表示分配的CPU量超过一个vCPU。
cpu-period设置是一个评估周期,区间在1ms~1s之间。
cpu-quota设置是这个评估周期的内CPU配额。
docker run -tid --name test -h test --cpu-period=1000000 --cpu-quota=1000000 centos
混合
可以将cpuset-cpus和cpu-period、cpu-quota结合起来使用,就是限定在一部分CPU核心里面进行配额调度。
docker run \ -tid \ --name tftest \ -h tftest \ --cpuset-cpus=0 \ --cpu-period=1000000 \ --cpu-quota=500000 \ centos
docker-compose
在docker-compose里面设置CPU参数只能设置cpus参数,这个和docker的cpus参数一致。
# mysql mysql: build: dockerfile: Dockerfile context: ./image/mysql5.7 container_name: mysql image: tflinux-mysql5.7 networks: - default - persist expose: - 3306 ports: - 3306:3306 volumes: - /tongfu.net/env/mysql-5.7.28/data/:/var/lib/mysql/ restart: always deploy: resources: limits: cpus: '2' memory: 512M
总结
福哥今天给童鞋们讲解了关于Docker的容器的CPU的使用限制方法,通过设置合理的CPU配额可以更加有效地发挥服务器的性能,可以让Docker发布的服务更加稳定~~