Docker第8章(Docker资源限制与验证)
1\。码头工人资源限制 Docker 的运行依赖于内核中的两个特性,命名空间和 CGroups。默认情况下,容器没有资源限制,因此它可以耗尽宿主机上内核分配给容器的所有资源。因此,为了防止一个容器耗尽宿主机的所有资源,需要使用资源约束。资源限制的某些特性需要 Linux 内核支持 Linux Capabilities。 docker 1.13版本之前,只支持CFS调度(Completely Fai
1\。码头工人资源限制
Docker 的运行依赖于内核中的两个特性,命名空间和 CGroups。默认情况下,容器没有资源限制,因此它可以耗尽宿主机上内核分配给容器的所有资源。因此,为了防止一个容器耗尽宿主机的所有资源,需要使用资源约束。资源限制的某些特性需要 Linux 内核支持 Linux Capabilities。 docker 1.13版本之前,只支持CFS调度(Completely Fair Scheduler),以后的版本也支持实时调度。
CFS调度:每个进程都有优先级,非实时进程的优先级从100到139。CSF调度用于调度这些非实时进程。优先进程首先由cpu执行。
realtime schedule:实时进程调度程序,优先级为 0-99。 realtime schedule 是一种特殊的调度器,用于调度实时进程。
2\。 Docker 的内存和 cpu 资源限制
1\。 CPU 限制
- cpusu003d<value>:指定一个容器可以使用多少可用的 CPU 资源。如果是4核cpu,可以设置为1.5,那么容器最多只能使用1.5核CPU资源。如果不是set-cpuset-cpus,可以使用的1.5-core可以是任意一种core资源。该选项只能在 docker 1.3 以上的版本中使用
-- cpu-shares:按比例分配CPU资源给容器。如果其他容器的 CPU 资源空闲,容器 1 将根据需要使用所有 CPU 资源,并将任务分配给任何核心处理。
- cpuset-cpus:指定哪些cpu核心可以用于容器。如果 CPU 是 4 和 3,那么根据数字 0-3 来区分每个内核。该参数设置为0,1,表示可以使用第一核和第二核。
2\。内存和交换限制
Memoru003d<value>:指定容器可以使用的最大内存量,如果一个进程使用的内存超过限制,它可能会被kill掉。
Memor-swap:指定容器可用的最大交换空间。此选项必须与 --memory 参数一起使用。如果不设置 --memory 参数,则不会生效。
内存交换:在设置容器时使用交换的倾向如何,0-100?
memory-reservation:容器使用内存的软限制,即必须设置为小于内存。当系统内存紧张时,容器的内存值-预留值的内存会被回收,容器的内存使用会降低到预留标准。
-- oom-kill-disable:容器内部进程发生oom时是否杀死容器
3\。使用压力测量工具进行测试
[root@bogon ~]# docker pull lorel/docker-stress-ng
使用默认标签:最新
最新:从 lorel/docker-stress-ng 中提取
c52e3ed763ff:拉取完成
a3ed95caeb02:拉动完成
7f831269c70e:拉动完成
达格萨: : 869
状态:为 lorel/docker-stress-ng:latest 下载更新的图像
1\。测试记忆
1.1。 cpu使用没有限制
[root@bogon ~]# docker container run --name stress -it --rm lorel/docker-stress-ng:latest --cpu 8
stress-ng: info: [1] 默认为每个压力源运行 86400 秒
压力-ng:信息:[1] 调度猪:8 cpu
[root@bogon ~]# docker stats
容器ID名称CPU%MEM使用/limit MEM%net I/O块I/O PIDS
92b0b8d916c1 压力 101.54% 15.81MiB / 1.61% 648B / 0B 0B / 0B
[root@bogon ~]#顶部
顶部 - 19:15:49 UP 2天2:38,2用户,负载平均:7.02,3.00,1.15
任务:总共 131 个,跑步 10 个,睡觉 121 个,停止 0 个,僵尸 0 个
%Cpu(s):99.7 us, 0.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB 内存:总计 1006892,免费 100680,已使用 320704,585508 buff/缓存
KiB 交换:总计 2097148,免费 2096628,已使用 520。 422732 可用内存
PID USER PR NI VIRT RES SHR S %CPU %MEM 时间+ 命令
40035 根 20 0 6908 4180 252 R 12.6 0.4 0:12.79 应力-ng-cpu
40037 根 20 0 6908 4180 252 R 12.6 0.4 0:12.78 应力-ng-cpu
40038 根 20 0 6908 2136 252 R 12.6 0.2 0:12.78 应力-ng-cpu
40040 根 20 0 6908 2136 252 R 12.6 0.2 0:12.78 应力-ng-cpu
40036 根 20 0 6908 2136 252 R 12.3 0.2 0:12.77 应力-ng-cpu
40039 根 20 0 6908 2136 252 R 12.3 0.2 0:12.78 应力-ng-cpu
40041 根 20 0 6908 4180 252 R 12.3 0.4 0:12.77 应力-ng-cpu
40042 根 20 0 6908 2136 252 R 12.3 0.2 0:12.77 应力-ng-cpu
1 根 20 0 128484 7208 4196 S 0.0 0.7 0:10.12 systemd
如您所见,cpu使用率已满
1.2.重启容器添加内存限制参数
[root@bogon ~]# docker container run --name stress --cpusu003d0.5 -it --rm lorel/docker-stress-ng:latest --cpu 8
stress-ng: info: [1] 默认为每个压力源运行 86400 秒
压力-ng:信息:[1] 调度猪:8 cpu
[root@bogon ~]# docker stats
容器ID名称CPU%MEM使用/limit MEM%net I/O块I/O PIDS
845220EF9982应力51.57%20.05MIB/983.3MIB 2.04%648B/0B 0B/0B/0B 9
设置的参数生效
2\。测试记忆
2.1。内存使用没有限制。压力测量指定两个内存,每个 128m。
[root@bogon ~]# docker container run --name stress -it --rm lorel/docker-stress-ng:latest --vm 2 --vm-bytes 128m
stress-ng: info: [1] 默认为每个压力源运行 86400 秒
压力-ng:信息:[1] 调度猪:2 vm
[root@bogon ~]# docker stats
容器ID名称CPU%MEM使用/limit MEM%net I/O块I/O PIDS
beb3cfa10748 压力 99.29% 256.2MiB / 983.3MiB 26.05% 648B / 0B
事实上,使用了 256M 内存。
2.2.重启容器并添加内存限制
--Memory 将容器限制为 128m 内存
[root@bogon ~]#docker container run --name stress -it --memoryu003d128m --rm lorel/docker-stress-ng:latest --vm 2 --vm-bytes 128m
stress-ng: info: [1] 默认为每个压力源运行 86400 秒
压力-ng:信息:[1] 调度猪:2 vm
[root@bogon ~]# docker stats
容器ID名称CPU%MEM使用/limit MEM%net I/O块I/O PIDS
DECEE18CB471应力99.47%126.4MIB/128MIB 98.77%648B/0B 3.19MB/461MB 5
更多推荐
所有评论(0)