1. 介绍
1.1 介绍
福哥在搭建TFLinux的Dockerfile版本的环境的时候遇到了一个问题,虽然一些服务可以通过scale继续动态扩容,但是持久化的服务却不能这样操作,福哥想为服务设置分配的内存上限应该怎么办呢?
2. CPU
2.1 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
2.2 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
2.3 cpus
通过cpus设置一个小数,来表明我们要使用的CPU的最大限制,这个小数的区间为0.01~[最大核心数]。
设置CPU最大使用限制为2.5个核心。
docker run -tid --name test -h test --cpus=2.5 centos
2.4 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
2.5 混合
可以将cpuset-cpus和cpu-period、cpu-quota结合起来使用,就是限定在一部分CPU核心里面进行配额调度。
docker run
-tid
--name tftest
-h tftest
--cpuset-cpus=0
--cpu-period=1000000
--cpu-quota=500000
centos
3. 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
4. 总结
福哥今天给童鞋们讲解了关于Docker的容器的CPU的使用限制方法,通过设置合理的CPU配额可以更加有效地发挥服务器的性能,可以让Docker发布的服务更加稳定~~
https://m.tongfu.net/home/35/blog/513367.html
















暂无评论内容