docker资源配额

avatar
作者
猴君
阅读量:2

        docker是基于Linux CGroup来控制进程对资源利用的限制及追踪;那什么是CGroup呢?

        CGroup(Contral Group) 是 Linux 中将进程按组进行系统资源分配和控制的机制;主要作用包括限制资源的使用、优先级控制、审计与统计、挂起及恢复进程;CGroup可以对docker限制的资源包括 CPU、内存、磁盘;

1、docker容器限制CPU;

    使用docker run --help 可以看到对CPU资源做限制的命令如下:

命令说明
--cpu-period int  限制 CPU 完全公平调度周期
--cpu-quota int限制 CPU 完全公平调度配额(绝对权重)
--cpu-rt-period int限制 CPU 实时时间段(以微秒为单位)
--cpu-rt-runtime int限制 CPU 实时运行时间(以微秒为单位)
--cpu-shares int指定CPU 份额(相对权重)
--cpus decimal指定CPU核心数
--cpuset-cpus string指定允许使用的CPU,值可以为 0-3,0,1
--cpuset-mems string指定允许使用的内存节点,值可以为0-3, 0,1

1.1.cpu-period

        通俗来说,是指定容器对CPU的使用在多长时间内重新做一次分配,单位为微秒(μs),范围在1ms-1s之间,也就是[1000, 1000000],默认为0.1s(100000μs);

docker run -itd --name=nginx3  --cpu-period 200000  chililopp/nginx:v1 

1.2.cpu-quota

        指定在period周期内,有多少时间来运行这个容器,单位为微秒(μs),最小值为1ms(1000μs),默认值为-1,也就是不做任何控制;

docker run -itd --name=nginx4  --cpu-period 200000  --cpu-quota 10000 chililopp/nginx:v1

1.3.cpu-rt-period

        cpu.rt_period_us是实时进程的周期时间,单位为微秒(μs),默认为1s(1000000μs)

docker run -itd --name=nginx5  --cpu-rt-period 200000  chililopp/nginx:v1 

1.4.cpu-rt-runtime

        cpu.rt_runtime_us是在一个周期时间内,实时进程占用的最大时间,单位为微秒(μs),默认是0;

docker exec -it nginx6 cat /sys/fs/cgroup/cpu/cpu.rt_runtime_us

1.5.cpu-shares

        指定容器所使用的 CPU 份额值,它仅仅只是一个弹性的值,并不能保证获得 1 个 vcpu 或者多少 GHz 的 CPU 资源;实际分配的权重受到 是否有其他同时运行的容器、容器中进程运行情况的影响;cpu-shares的值默认为1024;

docker run -itd --name=nginx7  --cpu-shares 512  chililopp/nginx:v1 

1.6.cpus

        指定可以使用的CPU核心数量,但不能指定哪一个核心,最小为0.01

docker run -itd --name=nginx8  --cpus 1  chililopp/nginx:v1

    

1.7.cpuset-cpus

        可以指定容器在哪些 CPU 核上运行;

docker run -itd --name=nginx10  --cpuset-cpus 0  chililopp/nginx:v1 

1.8.cpuset-mems

        指定允许使用的内存节点,对具有 NUMA 拓扑(具有多 CPU、多内存节点)的服务器尤其有 用,可以对需要高性能计算的容器进行性能最优的配置。

        如果服务器只有一个内存节点,则-- cpuset-mems 的配置基本上不会有明显效果。 ;

docker run -itd --name=nginx11  --cpuset-mems 0  chililopp/nginx:v1

 

2、docker容器限制内存;

使用docker run --help可以看到,对内存资源做限制的命令如下:

命令说明
-m, --memory bytes限制容器的内存使用量
--memory-reservation bytes限制内存的软性
--memory-swap bytes限制内存+交换分区总大小。
memory-swappiness int用于设置容器的虚拟内存控制行为
--kernel-memory bytes 限制核心内存

 2.1.memory bytes

        对容器能使用的内存做限制,选项的参数最小为 4 M;

docker run -itd --name=nginx4 -m 6m  chililopp/nginx:v1 

    

2.2.memory-reservation

        memory reservation 是一种软性机制,它不保证任何时刻容器使用的内存不会超过--memory-reservation限定的值,它只是确保容器不会长时间占用超过--memory-reservation限制的内存大小。

 docker run -itd --name=nginx5 -m 6m  --memory-reservation 6m  chililopp/nginx:v1 

2.3.memory-swap

        是内存加交换分区的总大小,memory-swap必须比-m,--memory大

docker run -itd --name=nginx6 -m 6m --memory-swap 7m  chililopp/nginx:v1

2.4.memory-swappiness

        用来设置这个交换分区和内存的使用比例的。范围为【0,100】。0 表示不使用swap。100 表示更倾向于使用swap交换。

docker run -itd --name=nginx7 -m 6m --memory-swappiness 7  chililopp/nginx:v1

 2.5.kernel-memory

        核心内存和用户内存不同的地方在于核心内存不能被交换出。不能交换出去的特性使得容器可以通过消耗太多内存来堵塞一些系统服务

docker run -itd --name=nginx8 -m 6m --memory-swappiness 7 --kernel-memory 4m  chililopp/nginx:v1

 

3、docker限制磁盘IO读写;

命令说明
--device-read-bps list限制容器读速度,单位可以是 kb、mb 或者 gb
--device-read-iops list  限制容器每秒读取IO次数
--device-write-bps list        限制容器写速度,单位可以是 kb、mb 或者 gb
--device-write-iops list限制容器每秒写入IO次数

3.1.实例:限制容器实例对硬盘的最高写入速度:

docker run -it --name=tomcat_3 -v /docker/data_volume:/data_Tomcat --device /dev/nvme0n1p3:/dev/sma --device-write-bps /dev/sma:2mb --device-read-bps /dev/sma:4mb  chililopp/tomcat:v1 /bin/bash 
time dd if=/dev/sma  of=/data_Tomcat/etl_tomcat.zip  bs=2M count=50 oflag=direct,nonblock

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!