我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux中如何使用cgroups限制cpu

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux中如何使用cgroups限制cpu

这篇文章主要讲解了“Linux中如何使用cgroups限制cpu”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中如何使用cgroups限制cpu”吧!

cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间。这里的 cfs 是完全公平调度器的缩写。cpu.cfs_period_us 就是时间周期,默认为 100000,即百毫秒。cpu.cfs_quota_us 就是在这期间内可使用的 cpu 时间,默认 -1,即无限制。

跑一个耗 cpu 的程序

代码如下:


# echo 'while True: pass'|python &
[1] 1532

top 一下可以看到,这进程占了 100% 的 cpu

代码如下:


 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1532 root      20   0  112m 3684 1708 R 99.6  0.7   0:30.42 python
...

然后就来对这个进程做一下限制。先把 /foo 这个控制组的限制修改一下,然后把进程加入进去。

代码如下:


echo 50000 >/sys/fs/cgroup/cpu/foo/cpu.cfs_quota_us
echo 1532 >/sys/fs/group/cpu/foo/tasks


可见,修改设置只需要写入相应文件,将进程加入 cgroup 也只需将 pid 写入到其中的 tasks 文件即可。这里将 cpu.cfs_quota_us 设为 50000,相对于 cpu.cfs_period_us 的 100000 即 50%。再 top 一下看看效果。

代码如下:


 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1532 root      20   0  112m 3684 1708 R 50.2  0.7   5:00.31 python
...

可以看到,进程的 cpu 占用已经被成功地限制到了 50% 。这里,测试的虚拟机只有一个核心。在多核情况下,看到的值会不一样。另外,cfs_quota_us 也是可以大于 cfs_period_us 的,这主要是对于多核情况。有 n 个核时,一个控制组中的进程自然最多就能用到 n 倍的 cpu 时间。

这两个值在 cgroups 层次中是有限制的,下层的资源不能超过上层。具体的说,就是下层的 cpu.cfs_period_us 值不能小于上层的值,cpu.cfs_quota_us 值不能大于上层的值。

另外的一组 cpu.rt_period_us、cpu.rt_runtime_us 对应的是实时进程的限制,平时可能不会有机会用到。

在 cpu 子系统中,cpu.stat 就是用前面那种方法做的资源限制的统计了。nr_periods、nr_throttled 就是总共经过的周期,和其中受限制的周期。throttled_time 就是总共被控制组掐掉的 cpu 使用时间。

还有个 cpu.shares, 它也是用来限制 cpu 使用的。但是与 cpu.cfs_quota_us、cpu.cfs_period_us 有挺大区别。cpu.shares 不是限制进程能使用的绝对的 cpu 时间,而是控制各个组之间的配额。比如

代码如下:


/cpu/cpu.shares : 1024
/cpu/foo/cpu.shares : 2048

那么当两个组中的进程都满负荷运行时,/foo 中的进程所能占用的 cpu 就是 / 中的进程的两倍。如果再建一个 /foo/bar 的 cpu.shares 也是 1024,且也有满负荷运行的进程,那 /、/foo、/foo/bar 的 cpu 占用比就是 1:2:1 。前面说的是各自都跑满的情况。如果其他控制组中的进程闲着,那某一个组的进程完全可以用满全部 cpu。可见通常情况下,这种方式在保证公平的情况下能更充分利用资源。

此外,还可以限定进程可以使用哪些 cpu 核心。cpuset 子系统就是处理进程可以使用的 cpu 核心和内存节点,以及其他一些相关配置。这部分的很多配置都和 NUMA 有关。其中 cpuset.cpus、cpuset.mems 就是用来限制进程可以使用的 cpu 核心和内存节点的。这两个参数中 cpu 核心、内存节点都用 id 表示,之间用 “,” 分隔。比如 0,1,2 。也可以用 “-” 表示范围,如 0-3 。两者可以结合起来用。如“0-2,6,7”。在添加进程前,cpuset.cpus、cpuset.mems 必须同时设置,而且必须是兼容的,否则会出错。例如

代码如下:


# echo 0 >/sys/fs/cgroup/cpuset/foo/cpuset.cpus
# echo 0 >/sys/fs/cgroup/cpuset/foo/cpuset.mems

这样, /foo 中的进程只能使用 cpu0 和内存节点0。用

代码如下:


# cat /proc/<pid>/status|grep '_allowed_list'


可以验证效果。

cgroups 除了用来限制资源使用外,还有资源统计的功能。做云计算的计费就可以用到它。有一个 cpuacct 子系统专门用来做 cpu 资源统计。cpuacct.stat 统计了该控制组中进程用户态和内核态的 cpu 使用量,单位是 USER_HZ,也就是 jiffies、cpu 滴答数。每秒的滴答数可以用 getconf CLK_TCK 来获取,通常是 100。将看到的值除以这个值就可以换算成秒。

cpuacct.usage 和 cpuacct.usage_percpu 是该控制组中进程消耗的 cpu 时间,单位是纳秒。后者是分 cpu 统计的。

P.S. 2014-4-22

发现在 SLES 11 sp2、sp3 ,对应内核版本 3.0.13、 3.0.76 中,对 cpu 子系统,将 pid 写入 cgroup.procs 不会实际生效,要写入 tasks 才行。在其他环境中,更高版本或更低版本内核上均未发现。

感谢各位的阅读,以上就是“Linux中如何使用cgroups限制cpu”的内容了,经过本文的学习后,相信大家对Linux中如何使用cgroups限制cpu这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux中如何使用cgroups限制cpu

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux中如何使用cgroups限制cpu

这篇文章主要讲解了“Linux中如何使用cgroups限制cpu”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中如何使用cgroups限制cpu”吧!cgroups 里,可以用 c
2023-06-13

Linux中如何使用cgroups控制内存资源

这篇文章将为大家详细讲解有关Linux中如何使用cgroups控制内存资源,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。cgroups 中有个 memory 子系统,用于限制和报告进程的内存使用情况。其中
2023-06-13

Linux中怎么使用cpulimit限制进程的cpu使用率

本篇内容介绍了“Linux中怎么使用cpulimit限制进程的cpu使用率”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!很用 Linux时可
2023-06-13

python如何限制CPU和内存使用量

这篇文章主要介绍了python如何限制CPU和内存使用量,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。限制「CPU」和内存使用量如果不是想优化程序对内存或 CPU 的使用率,
2023-06-27

如何在VirtualBox中限制虚拟机的CPU使用率

在VirtualBox中,您可以通过设置虚拟机的CPU限制来限制其使用率。以下是如何在VirtualBox中限制虚拟机的CPU使用率的步骤:打开VirtualBox并选择要限制CPU使用率的虚拟机。单击“设置”按钮以打开虚拟机的设置窗口。在
如何在VirtualBox中限制虚拟机的CPU使用率
2024-06-10

Linux中如何使用cgroups管理进程磁盘io

这篇文章给大家分享的是有关Linux中如何使用cgroups管理进程磁盘io的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。linux 的 cgroups 还可以限制和监控进程的磁盘 io。这个功能通过 blkio
2023-06-13

Docker Compose中如何限制容器的CPU和内存使用

这篇文章主要为大家介绍了Docker Compose中限制容器的CPU和内存使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-20

在Linux系统中怎么限制CPU占用率

这篇文章主要讲解了“在Linux系统中怎么限制CPU占用率”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Linux系统中怎么限制CPU占用率”吧!Linux内核是一名了不起的马戏表演者,它
2023-06-13

Linux空间如何限制资源使用

在Linux系统中,可以通过多种方法来限制资源的使用,以确保系统的稳定性和安全性。以下是一些主要的资源限制方法:使用ulimit命令ulimit命令是Linux中用于设置和查看资源限制的命令。它允许你设置或显示各种资源限制,如最大文件大
Linux空间如何限制资源使用
2024-09-30

Linux下怎么安装使用cpulimit来限制CPU的利用率

本篇内容介绍了“Linux下怎么安装使用cpulimit来限制CPU的利用率”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!随着Linux系统
2023-06-12

如何在Linux系统中使用限制网络带宽

本篇内容主要讲解“如何在Linux系统中使用限制网络带宽”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在Linux系统中使用限制网络带宽”吧!在 Linux 中限制一个应用的速率限制网络流量
2023-06-13

Linux如何查看CPU使用率

在Linux中,可以使用以下命令来查看CPU使用率:1. top命令:在终端中输入`top`命令,然后按下`1`键可以显示每个CPU核心的使用率。2. htop命令:htop是一个交互式的系统监视器,可以显示实时的CPU使用率。在终端中输入
2023-08-08

如何使用Timekpr-nExt限制Linux中每个账户的电脑使用

这篇文章将为大家详细讲解有关如何使用Timekpr-nExt限制Linux中每个账户的电脑使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用 Timekpr-nExt 在 Linux 上限制电脑使用如
2023-06-15

如何在Linux中使用Trickle限制应用程序带宽占用

这篇文章主要介绍“如何在Linux中使用Trickle限制应用程序带宽占用”,在日常操作中,相信很多人在如何在Linux中使用Trickle限制应用程序带宽占用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如
2023-06-13

Linux中如何使用chgrp和umask命令控制文件权限

这篇文章将为大家详细讲解有关Linux中如何使用chgrp和umask命令控制文件权限,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。chgrp - 改变文件的组所有权总览chgrp [选项]
2023-06-12

Linux中如何使用超级用户权限

这篇文章将为大家详细讲解有关Linux中如何使用超级用户权限,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。sudo 命令允许特权用户以 root 用户身份运行全部或部分命令,但是理解其能做什么和不能做什么
2023-06-28

Linux服务器中ftp如何限制ip

今天就跟大家聊聊有关Linux服务器中ftp如何限制ip,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。限制IP1、通过vsftpd的配置文件以及“hosts.deny”和“hosts
2023-06-06

如何使用CPUFetch在Linux终端中显示CPU细节

这篇文章主要介绍“如何使用CPUFetch在Linux终端中显示CPU细节”,在日常操作中,相信很多人在如何使用CPUFetch在Linux终端中显示CPU细节问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如
2023-06-15

编程热搜

目录