前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >推荐!两个有用的运维工具nsenter+cgroup(三)

推荐!两个有用的运维工具nsenter+cgroup(三)

作者头像
锅总
发布2024-06-12 15:36:04
600
发布2024-06-12 15:36:04
举报
文章被收录于专栏:锅总锅总

linux中cgroup是用于进程资源限制的重要技术,cgroup的命令众多,见之前文章 推荐!两个有用的运维工具nsenter+cgroup(一) 说明,本文用一个例子讲解操作cgroup的5个常用命令,分别为cgcreate、cgset、cgexec、 cgclassify、cgdelete。

例子准备

一个最多可以跑满3个cpu的shell脚本 cpu-demo.sh

shell

  1. [root@gentlewok 10122]# cat /tmp/cpu-demo.sh
  2. for i in `seq 3`
  3. do
  4. while :;do echo >/dev/null; done &
  5. done

Demo讲解及操作

cgcreate

作用:用于创建一个某类型的资源控制组

具体类型可在具体的linux系统中查看,类型如下ll命令所示,本文以cpu类型作为演示cgroup的cpu资源控制功能,其他类型的,可根据下文样例思路变换配置即

  1. [root@gentlewok 10122]# ll /sys/fs/cgroup/
  2. total 0
  3. drwxr-xr-x. 6 root root 0 Jun 2 03:37 blkio
  4. lrwxrwxrwx. 1 root root 11 Jun 2 03:37 cpu -> cpu,cpuacct
  5. lrwxrwxrwx. 1 root root 11 Jun 2 03:37 cpuacct -> cpu,cpuacct
  6. drwxr-xr-x. 7 root root 0 Jun 2 03:37 cpu,cpuacct
  7. drwxr-xr-x. 4 root root 0 Jun 2 03:37 cpuset
  8. drwxr-xr-x. 6 root root 0 Jun 2 03:37 devices
  9. drwxr-xr-x. 4 root root 0 Jun 2 03:37 freezer
  10. drwxr-xr-x. 4 root root 0 Jun 2 03:37 hugetlb
  11. drwxr-xr-x. 6 root root 0 Jun 2 03:37 memory
  12. lrwxrwxrwx. 1 root root 16 Jun 2 03:37 net_cls -> net_cls,net_prio
  13. drwxr-xr-x. 4 root root 0 Jun 2 03:37 net_cls,net_prio
  14. lrwxrwxrwx. 1 root root 16 Jun 2 03:37 net_prio -> net_cls,net_prio
  15. drwxr-xr-x. 4 root root 0 Jun 2 03:37 perf_event
  16. drwxr-xr-x. 6 root root 0 Jun 2 03:37 pids
  17. drwxr-xr-x. 6 root root 0 Jun 2 03:37 systemd
  18. [root@gentlewok 10122]# ll /sys/fs/cgroup/ | wc -l
  19. 16

创建一个cpu类型名称为gentlewok的资源控制组

  1. cgcreate -g cpu:gentlewok 创建一个cpu类型的资源控制组

cgset

作用:用于限制某一类型的资源使用值

为gentlewok设置cpu配额核数为6核,即6000000,单位为微秒(us), 1000000us = 1s

  1. cgset -r cpu.cfs_quota_us=6000000 /gentlewok # 配额6核
  2. cgset -r cpu.cfs_period_us=1000000 /gentlewok # cpu时间片占用为1s,两个参数结合,在多核系统上,理论上可以跑到600%,即占满6核cpu资源

具体有哪些值可以设置呢?可以查看对应类型控制组的目录 /sys/fs/cgroup/类型/控制组名,本文是cpu类型,控制组名为gentlewok

  1. [root@gentlewok gentlewok]# ls #可以设置的选项
  2. cgroup.clone_children cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release
  3. cgroup.event_control cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
  4. [root@gentlewok gentlewok]# pwd
  5. /sys/fs/cgroup/cpu/gentlewok
  6. [root@gentlewok gentlewok]# ls
  7. cgroup.clone_children cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release
  8. cgroup.event_control cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
  9. [root@gentlewok gentlewok]# cat cpu.cfs_quota_us #查看配置已生效
  10. 6000000
  11. [root@gentlewok gentlewok]# cat cpu.cfs_period_us #查看配置已生效
  12. 1000000

cgexec

作用:用于在一个控制组中启动进程,控制组内的资源限制策略作用于该进程

在gentlewok控制组中启动 cpu-demo.sh

  1. cgexec -g cpu:gentlewok /tmp/cpu-demo.sh

查看cpu资源控制情况,基本跑满3核。(上文配额6核,程序设计只跑3核)

只配额1核会发生什么

  1. cgset -r cpu.cfs_quota_us=1000000 /gentlewok

可以看到百分数加起来约等于100%,说明配额生效,cpu使用资源被限制住。

提示

  1. cgset -r cpu.cfs_quota_us=1000000 /gentlewok 等价于
  2. echo 1000000 > /sys/fs/cgroup/cpu/gentlewok/cfs_quota_us

cgclassify

如果这个进程已经是启动状态,该命令可将一个已存在的进程加入到资源控制组,加入后,控制组内的资源限制策略作用于该进程

将某进程的pid加入gentlewok控制组

  1. cgclassify -g cpu:gentlewok $pid

cgdelete

作用:删除一个某类型的资源控制组

删除gentlewok控制组

  1. cgdelete -g cpu:gentlewok

扩展

默认启动一个命令它的资源限制是什么呢?

cpu默认是无限配额,理论上可以打满整个服务器cpu,这样的配置在生产环境是有风险!!!其他资源,如内存,磁盘,网络等的默认配置,是否有风险呢?又该如何修改呢?读者可根据本文样例自行探索

  1. [root@gentlewok gentlewok]# /tmp/cpu-demo.sh
  1. #找到该进程引用的资源控制组
  2. [root@gentlewok ~]# cat /proc/5056/cgroup
  3. 11:freezer:/
  4. 10:memory:/system.slice/sshd.service
  5. 9:perf_event:/
  6. 8:cpuacct,cpu:/system.slice/sshd.service
  7. 7:hugetlb:/
  8. 6:blkio:/system.slice/sshd.service
  9. 5:pids:/system.slice/sshd.service
  10. 4:devices:/system.slice/sshd.service
  11. 3:cpuset:/
  12. 2:net_prio,net_cls:/
  13. 1:name=systemd:/system.slice/sshd.service
  14. [root@gentlewok sshd.service]# pwd
  15. /sys/fs/cgroup/cpu/system.slice/sshd.service
  16. [root@gentlewok sshd.service]# ls
  17. cgroup.clone_children cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release
  18. cgroup.event_control cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
  19. [root@gentlewok sshd.service]# cat cpu.rt_period_us
  20. 1000000
  21. #默认-1为无线配额,理论上可以打满整个服务器cpu
  22. [root@gentlewok sshd.service]# cat cpu.cfs_quota_us
  23. -1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锅总 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 例子准备
  • Demo讲解及操作
    • cgcreate
      • cgset
        • cgexec
          • cgclassify
            • cgdelete
              • 扩展
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档