1. cgroups限制CPU
1.1. 前置工作
-
安装
要使用cgroups来限制CPU,需要在Linux系统中安装cgroups工具,可以使用以下命令来安装:
1sudo apt-get install cgroup-bin安装完成后,就可以开始使用cgroups来限制CPU了。
-
查看cgroup是否开启
123456789101112131415161718$cat /boot/config-3.10.0-514.2.2.el7.x86_64 | grep CGROUP$cat /boot/config-3.10.0-1127.el7.x86_64 | grep CGROUPCONFIG_CGROUPS=y# CONFIG_CGROUP_DEBUG is not setCONFIG_CGROUP_FREEZER=yCONFIG_CGROUP_PIDS=yCONFIG_CGROUP_DEVICE=yCONFIG_CGROUP_CPUACCT=yCONFIG_CGROUP_HUGETLB=yCONFIG_CGROUP_PERF=yCONFIG_CGROUP_SCHED=yCONFIG_BLK_CGROUP=y# CONFIG_DEBUG_BLK_CGROUP is not setCONFIG_NETFILTER_XT_MATCH_CGROUP=mCONFIG_NET_CLS_CGROUP=yCONFIG_NETPRIO_CGROUP=y我们看到 /sys/fs/cgroup 目录中有若干个子目录,我们可以认为这些都是受 cgroups 控制的资源以及这些资源的信息。
- cpu — 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问
- blkio — 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)
- cpuacct — 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告
- cpuset — 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点
- devices — 这个子系统可允许或者拒绝 cgroup 中的任务访问设备
- memory — 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成内存资源使用报告
1.2. 限制CPU :修改cpu.cfs_quota_us即可
-
创建测试脚本use_cpu.sh
12345#!/bin/bashx=0while [ true ]; dox=$x+1done; -
在/sys/fs/cgroup/cpu目录下创建文件foo
12345678910111213141516171819[root@k8s-master foo]# lltotal 0-rw-r--r-- 1 root root 0 Nov 6 03:00 cgroup.clone_children--w--w--w- 1 root root 0 Nov 6 03:00 cgroup.event_control-rw-r--r-- 1 root root 0 Nov 6 03:00 cgroup.procs-r--r--r-- 1 root root 0 Nov 6 03:00 cpuacct.stat-rw-r--r-- 1 root root 0 Nov 6 03:00 cpuacct.usage-r--r--r-- 1 root root 0 Nov 6 03:00 cpuacct.usage_percpu-rw-r--r-- 1 root root 0 Nov 6 03:00 cpu.cfs_period_us-rw-r--r-- 1 root root 0 Nov 6 03:00 cpu.cfs_quota_us-rw-r--r-- 1 root root 0 Nov 6 03:00 cpu.rt_period_us-rw-r--r-- 1 root root 0 Nov 6 03:00 cpu.rt_runtime_us-rw-r--r-- 1 root root 0 Nov 6 03:00 cpu.shares-r--r--r-- 1 root root 0 Nov 6 03:00 cpu.stat-rw-r--r-- 1 root root 0 Nov 6 03:00 notify_on_release-rw-r--r-- 1 root root 0 Nov 6 03:20 tasksecho 50000 > cpu.cfs_quota_usecho 12345 > /sys/fs/cgroup/cpu/foo/tasks -
top查看cpu,控制在50%以内
1.3. 通过 cpu share 可以设置容器使用 CPU 的优先级
1 2 |
docker run --name "container_A" -c 1024 ubuntu docker run --name "container_B" -c 512 ubuntu |
container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。
需要特别注意的是,这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container_A 处于空闲状态,这时,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU
1.4. 限制cpu配额
参数通过--cpu-period=
示例:
1 |
docker run -d --cpu-period=100000 --cpu-quota=250000 --name test-c1 nginx:latest |
1.5. 限制cpu可用数量
参数通过--cpus=
示例:
1 2 |
[root@app51 ~]# docker run -d --cpus=2 --name test-c2 nginx:latest 5347269d0974e37af843b303124d8799c6f4336a14f61334d21ce9356b1535bc |
1.6. 使用固定的cpu
通过--cpuset-cpus参数指定,表示指定容器运行在某个或某些个固定的cpu上,多个cpu使用逗号隔开。例如四个cpu,0代表第一个cpu,--cpuset-cpus=1,3代表该容器只能运行在第二个或第四个cpu上。查看cpu可以通过cat /proc/cpuinfo
查看。
示例:
1 2 |
[root@app51 ~]# docker run -d --cpuset-cpus=1,3 --name test-c3 nginx:latest 276056fce04982c2de7969ca309560ce60b0ebf960cf7197808616d65aa112d4 |
2. cgroups限制内存
3. 参考
赞赏微信赞赏
支付宝赞赏