Linux中cgroups的基础知识

编辑: 别弃我
360集合包
360集合包
360集合包,一键装机、快捷方便。
立即下载   精品合集

  Linux下cgroups可用于物理内存的控制,适用于多种应用场景,因为cgroups中的东西较多,本文就给大家简单介绍下Linux cgroups,让大家对其有个初步的了解。

  从 2.6.24 版本开始,linux 内核提供了一个叫做 cgroups(控制组)的特性。cgroups 就是 control groups 的缩写,用来对一组进程所占用的资源做限制、统计、隔离。也是目前轻量级虚拟化技术 lxc (linux container)的基础之一。每一组进程就是一个控制组,也就是一个 cgroup。cgroups 分为几个子系统,每个子系统代表一种设施或者说是资源控制器,用来调度某一类资源的使用,如 cpu 时钟、内存、块设备 等。在实现上,cgroups 并没有增加新的系统调用,而是表现为一个 cgroup 文件系统,可以把一个或多个子系统挂载到某个目录。如

  代码如下:

  mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu

  就将 cpu 子系统挂载在了 /sys/fs/cgroup/cpu 。也可以在一个目录上挂载多个子系统,甚至全部挂载到一个目录也是可以的,不过我觉得,把每个子系统都挂载在不同目录会有更好的灵活性。用 mount|awk ‘$5==“cgroup” {print $0}’ 可以看到当前挂载的控制组。用 cat /proc/cgroups 可以看到当前所有控制组的状态。下面这个脚本,可以把全部子系统各种挂载到各自的目录上去。

  代码如下:

  #!/bin/bash《/p》 《p》cgroot=“${1:-/sys/fs/cgroup}”

  subsys=“${2:-blkio cpu cpuacct cpuset devices freezer memory net_cls net_prio ns perf_event}”《/p》 《p》mount -t tmpfs cgroup_root “${cgroot}”

  for ss in $subsys; do

  mkdir -p “$cgroot/$ss”

  mount -t cgroup -o “$ss” “$ss” “$cgroot/$ss”

  done

  看看那些目录里都有些啥,比如 ls 一下 /sys/fs/cgroup/cpu。

  代码如下:

  cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release tasks

  cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat release_agent

  其中 “cpu.” 开头的就是这个子系统里特有的东西。其他的那些是每个子系统所对应目录里都有的。这些文件就是用来读取资源使用信息和进行资源限制的。要创建一个控制组,就在需要的子系统里创建一个目录即可。如 mkdir /sys/fs/cgroup/cpu/foo 就创建了一个 /foo 的控制组。在新建的目录里就会出现同样一套文件。在这个目录里,也一样可以继续通过创建目录来创建 cgroup。也就是说,cgroup 是可以和目录结构一样有层次的。对与每个子系统挂载点点目录,就相当于根目录。每一条不同的路径就代表了一个不同的 cgroup。在不同的子系统里,路径相同就代表了同一个控制组。如,在 cpu、memory 中都有 foo/bar 目录,就可以用 那 /foo/bar 来操作 cpu、memory 两个子系统。对于同一个子系统,每个进程都属于且只属于一个 cgroup,默认是在根 cgroup。层次结构方便了控制组的组织和管理,对于某些配置项来说,层次结构还和资源分配有关。另外,也可以修改某个目录的 owner ,让非 root 用户也能操作某些特定的安全组。

  cgroups 的设置和信息读取是通过对那些文件的读写来进行的。例如

  代码如下:

  # echo 2048 》/sys/fs/cgroup/cpu/foo/cpu.shares

  就把 /foo 这个控制组的 cpu.shares 参数设为了 2048。

  前面说,有些文件是每个目录里共有的。那些就是通用的设置。其中,tasks 和 cgroups.procs 是用来管理控制组中的进程的。要把一个进程加入到某个控制组,把 pid 写入到相应目录的 tasks 文件即可。如

  代码如下:

  # echo 5678 》/sys/fs/cgroup/cpu/foo/tasks

  就把 5678 进程加入到了 /foo 控制组。那么 tasks 和 cgroups.procs 有什么区别呢?前面说的对“进程”的管理限制其实不够准确。系统对任务调度的单位是线程。在这里,tasks 中看到的就是线程 id。而 cgroups.procs 中是线程组 id,也就是一般所说的进程 id 。将一个一般的 pid 写入到 tasks 中,只有这个 pid 对应的线程,以及由它产生的其他进程、线程会属于这个控制组,原有的其他线程则不会。而写入 cgroups.procs 会把当前所有的线程都加入进去。如果写入 cgroups.procs 的不是一个线程组 id,而是一个一般的线程 id,那会自动找到所对应的线程组 id 加入进去。进程在加入一个控制组后,控制组所对应的限制会即时生效。想知道一个进程属于哪些控制组,可以通过 cat /proc/《pid》/cgroup 查看。

  要把进程移出控制组,把 pid 写入到根 cgroup 的 tasks 文件即可。因为每个进程都属于且只属于一个 cgroup,加入到新的 cgroup 后,原有关系也就解除了。要删除一个 cgroup,可以用 rmdir 删除相应目录。不过在删除前,必须先让其中的进程全部退出,对应子系统的资源都已经释放,否则是无法删除的。

  前面都是通过文件系统访问方式来操作 cgroups 的。实际上,也有一组命令行工具。

  lssubsys -am 可以查看各子系统的挂载点,还有一组“cg”开头的命令可以用来管理。其中 cgexec 可以用来直接在某些子系统中的指定控制组运行一个程序。如 cgexec -g “cpu,blkio:/foo” bash 。其他的命令和具体的参数可以通过 man 来查看。

  下面是个 bash 版的 cgexec,演示了 cgroups 的用法,也可以在不确定是否安装命令行工具的情况下使用。

  代码如下:

  #!/bin/bash《/p》 《p》# usage:

  # 。/cgexec.sh cpu:g1,memory:g2/g21 sleep 100《/p》 《p》blkio_dir=“/sys/fs/cgroup/blkio”

  memory_dir=“/sys/fs/cgroup/memory”

  cpuset_dir=“/sys/fs/cgroup/cpuset”

  perf_event_dir=“/sys/fs/cgroup/perf_event”

  freezer_dir=“/sys/fs/cgroup/freezer”

  net_cls_dir=“/sys/fs/cgroup/net_cls”

  cpuacct_dir=“/sys/fs/cgroup/cpuacct”

  cpu_dir=“/sys/fs/cgroup/cpu”

  hugetlb_dir=“/sys/fs/cgroup/hugetlb”

  devices_dir=“/sys/fs/cgroup/devices”《/p》 《p》groups=“$1”

  shift《/p》 《p》IFS=‘,’ g_arr=($groups)

  for g in ${g_arr[@]}; do

  IFS=‘:’ g_info=($g)

  if [ ${#g_info[@]} -ne 2 ]; then

  echo “bad arg $g” 》&2

  continue

  fi

  g_name=${g_info[0]}

  g_path=${g_info[1]}

  if [ “$g_path” == “${g_path#/}” ]; then

  g_path=“/$g_path”

  fi

  echo $g_name $g_path

  var=“${g_name}_dir”

  d=${!var}

  if [ -z “$d” ]; then

  echo “bad cg name $g_name” 》&2

  continue

  fi

  path=“${d}${g_path}”

  if [ ! -d “$path” ]; then

  echo “cg not exists” 》&2

  continue

  fi

  echo “$$” 》“${path}/tasks”

  done《/p》 《p》exec $*

  上面就是Linux cgroups的相关介绍了,cgroups可提供多种功能,本文只介绍了一些cgroups基础知识,如果你还想了解更多的cgroups,请持续关注系统之家网站。

相关推荐
最新软件
最新教程
2.5332
基本信息
SQL
$_GET
$_POST
$_COOKIE
包含文件
自动加载
  1. 模型: /www/wwwroot/www.pjwan.com/lecms/model/
  2. 视图: /www/wwwroot/www.pjwan.com/view/m/xt_show.htm
  3. 控制器: /www/wwwroot/www.pjwan.com/lecms/control/show_control.class.php
  4. 日志目录: /www/wwwroot/www.pjwan.com/log/
  5. 当前页面: /www/wwwroot/www.pjwan.com/index.php
  6. 当前时间: 2026-08-19 11:11:34
  7. 当前网协: 216.73.216.186
  8. 请求路径: /anzhuang/31429.html
  9. 运行时间: 2.5332
  10. 内存开销: 1.1 MB
  1. #0 [time:0.0003s] SELECT * FROM le_runtime WHERE k='cfg' LIMIT 1
  2. #1 [time:0.0002s] SELECT * FROM le_runtime WHERE k='website_group_m_pjwan_com' LIMIT 1
  3. #2 [time:0.0002s] SELECT id FROM le_website_group WHERE webdomain='m.pjwan.com' AND is_active=1 ORDER BY id ASC LIMIT 0,1
  4. #3 [time:0.0003s] SELECT id FROM le_website_group WHERE webdomain='m.pjwan.com' AND is_active=1 ORDER BY id ASC LIMIT 0,1
  5. #4 [time:0.0003s] SELECT id FROM le_website_group WHERE webdomain='m.pjwan.com' AND is_active=1 ORDER BY id ASC LIMIT 0,1
  6. #5 [time:0.0003s] SELECT * FROM le_runtime WHERE k='cate_68' LIMIT 1
  7. #6 [time:0.0002s] SELECT id FROM le_website_group WHERE webdomain='m.pjwan.com' AND is_active=1 ORDER BY id ASC LIMIT 0,1
  8. #7 [time:0.0004s] SELECT * FROM le_cms_article WHERE id=31429 LIMIT 1
  9. #8 [time:0.0002s] SELECT id FROM le_website_group WHERE webdomain='m.pjwan.com' AND is_active=1 ORDER BY id ASC LIMIT 0,1
  10. #9 [time:0.0005s] SELECT id FROM le_website_group WHERE webdomain='m.pjwan.com' AND is_active=1 ORDER BY id ASC LIMIT 0,1
  11. #10 [time:0.0006s] SELECT * FROM le_user WHERE uid=2 LIMIT 1
  12. #11 [time:0.0005s] SELECT * FROM le_cms_article_data WHERE id=31429 LIMIT 1
  13. #12 [time:0.0005s] SELECT * FROM le_cms_article_views WHERE id=31429 LIMIT 1
  14. #13 [time:0.0004s] UPDATE LOW_PRIORITY le_cms_article_views SET views=views+1 WHERE id=31429 LIMIT 1
  15. #14 [time:0.0005s] SELECT * FROM le_kv WHERE k='navigate' LIMIT 1
  16. #15 [time:0.0003s] SELECT * FROM le_kv WHERE k='le_sharejs' LIMIT 1
  17. #16 [time:0.0005s] SELECT tagid,id FROM le_cms_article_tag_data WHERE tagid=8774 ORDER BY id DESC LIMIT 0,6
  18. #17 [time:0.0004s] SELECT * FROM le_cms_article_tag_data WHERE tagid=8774 AND id=77638 OR tagid=8774 AND id=58687 OR tagid=8774 AND id=31429
  19. #18 [time:0.0004s] SELECT * FROM le_cms_article WHERE id=77638 OR id=58687
  20. #19 [time:0.0003s] SELECT * FROM le_runtime WHERE k='cate_1' LIMIT 1
  21. #20 [time:0.0003s] SELECT id FROM le_website_group WHERE webdomain='m.pjwan.com' AND is_active=1 ORDER BY id ASC LIMIT 0,1
  22. #21 [time:0.0007s] SELECT id FROM le_cms_pcsoft WHERE (cid=3 OR cid=4 OR cid=5 OR cid=6 OR cid=7 OR cid=8 OR cid=9 OR cid=10 OR cid=11 OR cid=12 OR cid=13) ORDER BY id DESC LIMIT 0,8
  23. #22 [time:0.0006s] SELECT * FROM le_cms_pcsoft WHERE id=681 OR id=680 OR id=679 OR id=678 OR id=677 OR id=676 OR id=675 OR id=674
  24. #23 [time:0.0003s] SELECT * FROM le_user WHERE uid=1 LIMIT 1
  25. #24 [time:0.0004s] SELECT id FROM le_cms_article WHERE cid=68 ORDER BY id DESC LIMIT 0,5
  26. #25 [time:0.0006s] SELECT * FROM le_cms_article WHERE id=79666 OR id=79665 OR id=79664 OR id=79663 OR id=79662
  1. #control => show
  2. #action => index
  3. #cid => 68
  4. #id => 31429
  5. #mid => 2
      1. #0 /www/wwwroot/www.pjwan.com/index.php
      2. #1 /www/wwwroot/www.pjwan.com/lecms/xiunophp/xiunophp.php
      3. #2 /www/wwwroot/www.pjwan.com/lecms/config/config.inc.php
      4. #3 /www/wwwroot/www.pjwan.com/lecms/xiunophp/lib/base.func.php
      5. #4 /www/wwwroot/www.pjwan.com/lecms/xiunophp/lib/core.class.php
      6. #5 /www/wwwroot/www.pjwan.com/lecms/xiunophp/lib/debug.class.php
      7. #6 /www/wwwroot/www.pjwan.com/lecms/xiunophp/lib/log.class.php
      8. #7 /www/wwwroot/www.pjwan.com/lecms/xiunophp/lib/model.class.php
      9. #8 /www/wwwroot/www.pjwan.com/lecms/xiunophp/lib/view.class.php
      10. #9 /www/wwwroot/www.pjwan.com/lecms/xiunophp/lib/control.class.php
      11. #10 /www/wwwroot/www.pjwan.com/lecms/xiunophp/db/db.interface.php
      12. #11 /www/wwwroot/www.pjwan.com/lecms/xiunophp/db/db_pdo_mysql.class.php
      13. #12 /www/wwwroot/www.pjwan.com/lecms/xiunophp/cache/cache.interface.php
      14. #13 /www/wwwroot/www.pjwan.com/lecms/xiunophp/cache/cache_memcache.class.php
      15. #14 /www/wwwroot/www.pjwan.com/lecms/xiunophp/ext/network/Network__interface.php
      16. #15 /www/wwwroot/www.pjwan.com/lecms/config/plugin.inc.php
      17. #16 /www/wwwroot/www.pjwan.com/lecms/plugin/editor_sd/conf.php
      18. #17 /www/wwwroot/www.pjwan.com/lecms/plugin/editor_tinymce/conf.php
      19. #18 /www/wwwroot/www.pjwan.com/lecms/plugin/editor_um/conf.php
      20. #19 /www/wwwroot/www.pjwan.com/lecms/plugin/le_adminer/conf.php
      21. #20 /www/wwwroot/www.pjwan.com/lecms/plugin/le_baidu_zz/conf.php
      22. #21 /www/wwwroot/www.pjwan.com/lecms/plugin/le_category_filter/conf.php
      23. #22 /www/wwwroot/www.pjwan.com/lecms/plugin/le_content_tag_url/conf.php
      24. #23 /www/wwwroot/www.pjwan.com/lecms/plugin/le_data_table_split/conf.php
      25. #24 /www/wwwroot/www.pjwan.com/lecms/plugin/le_drafts/conf.php
      26. #25 /www/wwwroot/www.pjwan.com/lecms/plugin/le_feedback/conf.php
      27. #26 /www/wwwroot/www.pjwan.com/lecms/plugin/le_homepage_feign/conf.php
      28. #27 /www/wwwroot/www.pjwan.com/lecms/plugin/le_html_cache/conf.php
      29. #28 /www/wwwroot/www.pjwan.com/lecms/plugin/le_links/conf.php
      30. #29 /www/wwwroot/www.pjwan.com/lecms/plugin/le_minganci_do/conf.php
      31. #30 /www/wwwroot/www.pjwan.com/lecms/plugin/le_rand404content/conf.php
      32. #31 /www/wwwroot/www.pjwan.com/lecms/plugin/le_rand_author/conf.php
      33. #32 /www/wwwroot/www.pjwan.com/lecms/plugin/le_rand_pic_cid/conf.php
      34. #33 /www/wwwroot/www.pjwan.com/lecms/plugin/le_sharejs/conf.php
      35. #34 /www/wwwroot/www.pjwan.com/lecms/plugin/le_slide/conf.php
      36. #35 /www/wwwroot/www.pjwan.com/lecms/plugin/le_special_pro/conf.php
      37. #36 /www/wwwroot/www.pjwan.com/lecms/plugin/le_spider/conf.php
      38. #37 /www/wwwroot/www.pjwan.com/lecms/plugin/le_super_sitemap/conf.php
      39. #38 /www/wwwroot/www.pjwan.com/lecms/plugin/le_title_pic/conf.php
      40. #39 /www/wwwroot/www.pjwan.com/lecms/plugin/le_use_del_id/conf.php
      41. #40 /www/wwwroot/www.pjwan.com/lecms/plugin/le_webp_oss/conf.php
      42. #41 /www/wwwroot/www.pjwan.com/lecms/plugin/le_website_group/conf.php
      43. #42 /www/wwwroot/www.pjwan.com/lecms/plugin/le_zhanqunsitemaps_pro_v303/conf.php
      44. #43 /www/wwwroot/www.pjwan.com/lecms/plugin/lu_huochetou/conf.php
      45. #44 /www/wwwroot/www.pjwan.com/lecms/plugin/models_filed/conf.php
      46. #45 /www/wwwroot/www.pjwan.com/lecms/plugin/qrcode/conf.php
      47. #46 /www/wwwroot/www.pjwan.com/lecms/plugin/sy_mobile/conf.php
      48. #47 /www/wwwroot/www.pjwan.com/runcache/misc.func.php
      49. #48 /www/wwwroot/www.pjwan.com/runcache/core_lang/zh-cn.php
      50. #49 /www/wwwroot/www.pjwan.com/runcache/lang/zh-cn.php
      51. #50 /www/wwwroot/www.pjwan.com/runcache/lecms_control/parseurl_control.class.php
      52. #51 /www/wwwroot/www.pjwan.com/runcache/lecms_model/runtime_model.class.php
      53. #52 /www/wwwroot/www.pjwan.com/runcache/lecms_model/website_group_model.class.php
      54. #53 /www/wwwroot/www.pjwan.com/runcache/lecms_control/show_control.class.php
      55. #54 /www/wwwroot/www.pjwan.com/runcache/lecms_control/base_control.class.php
      56. #55 /www/wwwroot/www.pjwan.com/runcache/lecms_model/urls_model.class.php
      57. #56 /www/wwwroot/www.pjwan.com/runcache/lecms_model/category_model.class.php
      58. #57 /www/wwwroot/www.pjwan.com/runcache/lecms_model/cms_content_model.class.php
      59. #58 /www/wwwroot/www.pjwan.com/runcache/lecms_view/m,xt_show.htm.php
      60. #59 /www/wwwroot/www.pjwan.com/runcache/lecms_model/cms_content_data_model.class.php
      61. #60 /www/wwwroot/www.pjwan.com/runcache/lecms_model/cms_content_tag_model.class.php
      62. #61 /www/wwwroot/www.pjwan.com/runcache/lecms_model/user_model.class.php
      63. #62 /www/wwwroot/www.pjwan.com/runcache/lecms_model/cms_content_views_model.class.php
      64. #63 /www/wwwroot/www.pjwan.com/runcache/lecms_model/kv_model.class.php
      65. #64 /www/wwwroot/www.pjwan.com/runcache/lecms_model/cms_content_tag_data_model.class.php
      66. #65 /www/wwwroot/www.pjwan.com/lecms/xiunophp/ext/utf8.class.php
      67. #66 /www/wwwroot/www.pjwan.com/lecms/xiunophp/tpl/sys_trace.php
      1. #0 utf8 类