Cgroup限制cpu使用
Cgroup
查看cgroup是否开启
1 | cat /boot/config-3 .10.0-514.2.2.el7.x86_64 | grep CGROUP |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@k8s-master hpa] # cat /boot/config-3.10.0-1127.el7.x86_64 | grep CGROUP CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_HUGETLB=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_SCHED=y CONFIG_BLK_CGROUP=y # CONFIG_DEBUG_BLK_CGROUP is not set CONFIG_NETFILTER_XT_MATCH_CGROUP=m CONFIG_NET_CLS_CGROUP=y CONFIG_NETPRIO_CGROUP=y |
我们看到 /sys/fs/cgroup 目录中有若干个子目录,我们可以认为这些都是受 cgroups 控制的资源以及这些资源的信息。
- cpu — 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。
- blkio — 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。
- cpuacct — 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。
- cpuset — 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。
- devices — 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。
- memory — 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成内存资源使用报告。
1、限制CPU :修改cpu.cfs_quota_us即可
1 2 3 4 5 | 1、创建测试脚本use_cpu.sh<br> #!/bin/bash x=0 while [ true ]; do x=$x+1 done ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 2、在 /sys/fs/cgroup/cpu 目录下创建文件foo,<br><br>[root@k8s-master foo] # ll total 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 tasks |
1 | 3、 echo 50000 > cpu.cfs_quota_us |
1 | 4、 echo 12345 > /sys/fs/cgroup/cpu/foo/tasks |
5、top查看cpu,控制在50%以内
2、通过 cpu share 可以设置容器使用 CPU 的优先级
1 2 3 | 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
3、限制cpu配额
参数通过--cpu-period=<value>和--cpu-quota=<value>共同起作用,即介绍上述Cgroups使用的例子。表示在cpu-period时间(默认100ms)内,可用的cpu配额。
示例:
docker run -d --cpu-period=100000 --cpu-quota=250000 --name test-c1 nginx:latest
4、限制cpu可用数量
参数通过--cpus=<value>指定,意思限制可用cpu个数,列如--cpus=2.5表示该容器可使用的cpu个数最多是2.5个,这相当与设置了--cpu-period=100000和 --cpu-quota=250000该指令在docker版本1.13以及以上使用。
示例:
[root@app51 ~]# docker run -d --cpus=2 --name test-c2 nginx:latest 5347269d0974e37af843b303124d8799c6f4336a14f61334d21ce9356b1535bc
5、使用固定的cpu
通过--cpuset-cpus参数指定,表示指定容器运行在某个或某些个固定的cpu上,多个cpu使用逗号隔开。例如四个cpu,0代表第一个cpu,--cpuset-cpus=1,3代表该容器只能运行在第二个或第四个cpu上。查看cpu可以通过cat /proc/cpuinfo查看。
示例:
[root@app51 ~]# docker run -d --cpuset-cpus=1,3 --name test-c3 nginx:latest
276056fce04982c2de7969ca309560ce60b0ebf960cf7197808616d65aa112d4
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?