微软官方MSDN原版Win10系统下载

现在位置: 首页  > 系统教程  > Linux教程

Linux下如何使用cgroups管理CPU资源

时间:2024-11-23 02:08:41   

大家好,今天Win10系统之家小编给大家分享「Linux下如何使用cgroups管理CPU资源」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!

安心养老政务管理平台系列软件最新版本下载

  通过前面的介绍,我们了解到Linux中cgroups可用来限制cpu资源,那么具体要如何实现呢?下面小编就给大家介绍下Linux中如何使用cgroups来限制cpu资源。

  这回说说怎样通过 cgroups 来管理 cpu 资源。先说控制进程的 cpu 使用。在一个机器上运行多个可能消耗大量资源的程序时,我们不希望出现某个程序占据了所有的资源,导致其他程序无法正常运行,或者造成系统假死无法维护。这时候用 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资源的方法介绍了,如果你运行的程序占用过多资源,可以使用cgroups控制cpu资源,赶紧试试看吧。

以上就是关于「Linux下如何使用cgroups管理CPU资源」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~

『本②文★来源Win10系统之家,转载请联系网站管理人员!』

上一篇:返回列表 下一篇:返回列表

相关文章

  • Linux下如何使用命令监控服务器

    Linux下如何使用命令监控服务器


      如果你想要了解Linux服务器的目前状况,那么你就需要知道Linux服务器监控命令,使用Linux服务器监控命令,可以知道当前服务器正在做什么,那么Linux服务器监控命令有哪些呢?随小编一起来了解下吧。
      有些Linux发行版会提供GUI程序来进行系统的监控,例如SUSELinux就有一个非常棒而且专业的工具YaST,KDE的KDESystemGuard同样很出色。当然,...
  • Linux下如何使用cp命令指南

    Linux下如何使用cp命令指南


      Linux下cp命令的用法主要用于复制文件,加上参数还可以复制目录,下面随小编一起来了解下Linux下cp命令的具体用法。
      一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。
  • Linux下如何使用touch命令?

    Linux下如何使用touch命令?


      在Linux命令中,我们会经常使用到cd、ls等命令,但像touch这样的命令就比较少用了,那么touch命令有什么作用呢?下面随小编一起来了解下Linux下touch命令的用法吧。
      linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件。
      1.命令格式:
      touch[选项]。。。文件。。...
  • Linux下如何使用命令同步时钟

    Linux下如何使用命令同步时钟


      如果Linux系统中的硬件时钟和系统时钟不同步的话,就可能导致一些错误,所以系统时钟和硬件时钟的同步是很重要的,下面小编将给大家介绍如何使用命令来同步Linux系统的时钟。
      linux的系统时钟在很多地方都要用到,要是不准,就会出现一些奇怪的问题;
      在Linux中,用于时钟查看和设置的命令主要有date、hwclock和clock。Linux时钟分为系统时钟(...