文章目录

  • Docker资源控制
  • 1.对CPU的控制
  • 1)限制CPU使用速率
  • 2)多任务按比例分享CPU
  • 3)限制CPU的内核使用
  • 2.对内存使用的限制
  • 3. 对blkio的限制


Docker资源控制

1.对CPU的控制

1)限制CPU使用速率

在Docker中可以通过 --cpu-quota选项来限制CPU的使用率,CPU的百分比是以1000为单位的。

docker run --cpu-quota 20000 容器名 # CPU的使用率限定为20%

在CentOS中还可以通过修改对应的Cgrep配置文件/sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us的值来实现,直接执行echo命令将设定值导入到此文件中就会立即生效。

[root@localhost ~]# echo 20000 > /sys/fs/cgroup/cpu/docker/ae4c24239956ee20786a966cd4db9a459a459e2c47faaf03977ab88d03b7a834/cpu.cfs_quota_us
2)多任务按比例分享CPU

当有多个容器任务运行时,很难计算CPU的使用率。为了使容器合理使用CPU资源,可以通过–cpu-share选项设置CPU按比例共享CPU资源,这种方式还可以实现CPU使用率的动态调整。

比如:运行三个容器A、B、C,占用CPU资源的比例为1:1:2,可以这样执行:

docker run --cpu-share 1024 容器A
docker run --cpu-share 1024 容器B
docker run --cpu-share 2048 容器C
3)限制CPU的内核使用

在Docker中可以使用–cpuset-cpus选项来使某些程序独享CPU内核,以便提高其处理速度。

如果服务器有16个内核,那么CPU的编号为015,使容器绑定15个内核使用,则:

docker run --cpuset-cpus 0,1,2,3,4 容器名

建议:
尽量使用绑定内核的方式分配CPU资源给容器进程使用,然后再配合 --cpu-share选项动态调整CPU使用资源的比例。

2.对内存使用的限制

在Docker中可以通过docker run -m命令来限制容器内存使用量,相应的Cgroup配置文件为/sys/fs/cgroup/memory/memory.limit_in_bytes 。但是需要注意:一旦容器Cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制内存使用在限制范围之内,进程就会被杀死。

例如:限制容器的内存为512M

docker run -m 512m 容器名

3. 对blkio的限制

如果是在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时可以通过 --device-write-iops选项来限制写入的iops,相应的还有 --device-read-bps选项可以限制读取的iops。但是这种方法只能针对blkio限制的是设备(device),而不是分区。相应Cgroup写配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkio.throttle.write_iops_device。

例如:限制容器的/dev/sda1 的写入iops为1MB

docker run --device-write-bps /dev/sda1:1mb 容器名