当前位置: 首页 > news >正文

Cgroup 控制组学习(二)

二   CGroups实验

本'篇章'主要是通过一些'实验案例场景'加深对'cgroup'的理解

①  前置回顾

前置1:'/sys/fs/cgroup' 目录下的'每个子目录'就对应着一个'子系统'补充:/sys/fs/cgroup 目录下列了各个subsystem'资源管理器'eg:  CGroups 的 memory 子系统的'挂载点'是 /sys/fs/cgroup/memory前置2:cgroup是一种伪'文件系统'

②  查看systemd管理的mysqld服务进程cgroup

前置: 在'节点上'使用 systemd 管理了一个 'mysqld'的应用思考: 如何查看 'mysqld 进程'所在的 cgroup操作: 'systemctl status mysqld' 命令查看 'mysqld 进程'所在的 cgroup 为 /system.slice/mysqld.service

分析:上面显示的 CGroup 只是一个'相对'的路径,实际的'文件系统目录'是在对应的'子系统'下面

③  cgroup管理器

浅谈 Cgroups 和 Systemd       linux中 Systemd 和 cgroups 的关系详解

++++++++++++  "containerd设置cgroup驱动"  ++++++++++++1)​在 'containerd' 的配置中,通常设置'--cgroup-manager=systemd'2)通过containerd '配置文件' /etc/containerd/config.toml 中的'SystemdCgroup参数'切换说明:SystemdCgroup = false  --> 切换为'cgroupfs'驱动补充:如果'cat /proc/<容器PID>/cgroup'路径包含'system.slice'则使用'systemd'驱动‌

 

④  Centos系统使用libcgroup-tools管理控制组

+++++++++++ 掌握'cgcreate'、'cgclassify'、'cgdelete'、'cgexec'命令  +++++++++++1、使用cgcreate命令创建一个'新的控制组'cgcreate -g cpu,memory:wzj说明:在/sys/fs/cgroup目录下创建一个名为'wzj'的控制组,并关联'CPU'和'memory'子系统2、添加'进程'到控制组使用'cgclassify命令'将进程添加到'控制组'中cgclassify -g cpu,memory:wzj PID3、从控制组中'移动进程'使用cgclassify命令将进程从'一个'控制组移动到'另一个'控制组:cgclassify -g cpu,memory:another_wzj PID8) '删除'控制组使用'cgdelete'命令删除一个控制组:cgdelete cpu,memory:wzj

⑤  手动创建空目录的形式管理控制组

实验目的:CGroup 如何'限制CPU'说明:mkdir创建'控制组【空目录】',会自动继承'父级'的特性备注:不推荐mkdir的方式+++++++++++++++++++++++ "【1】创建控制组" +++++++++++++++++++++++1)在 /sys/fs/cgroup/cpu 文件夹中新建'空目录' demo 2) demo 继承 'cpu 子系统',cgroups 的文件系统会在创建文件目录的时候'自动创建'这些配置文件

+++++++++++++++++++++++ "【2】启动服务获取进程pid号" +++++++++++++++++++++++1) 简单的 'Python 脚本'来消耗 CPU   --> 'cpu 100%'# wzj.pywhile True:pass2) 通过'stress'命令方式stress  -c 1 &>/dev/null &         --> 'cpu 100%'3) #vim test.sh --> '创建一个无限循环的脚本'while :do:done

 
使用stress命令进行压力测试cpu、内存、磁盘

+++++++++++++++++++++++ "【3】将进程pid写入到tasks文件中" +++++++++++++++++++++++1、现在我们将这个进程 ID '' 写入到 /sys/fs/cgroup/cpu/demo/tasks 文件下面去等价命令 'cgexec -g cpu:demo python wzj.py' 将该程序'绑定'限制内存的 cgroup 执行这个命令是cgroup启动的cgexec命令在'指定的cgroup中'运行任务,不需要自己写入'tasks'中2、然后设置 /sys/fs/cgroup/cpu/demo/cpu.cfs_quota_us 为 10000us效果:在'每个100毫秒'的'调度周期'内,最多只能使用'10毫秒'的CPU时间3、效果:限制 该'pid' CPU 使用率为 '10%'备注:因为 cpu.cfs_period_us 默认值为 100000us

++++++++++++++++++++ "【4】使用 top 命令验证CPU使用率是否收限" ++++++++++++++++++++

++++++++++++++++++++ "【5】清理测试环境" ++++++++++++++++++++说明:如果要删除这个 'cgroup','rm'直接删除文件夹是不行的,需要通过'cgdelete'意外之喜:即使是'root'权限,也无法通过'rm'方式删除'cgroup'控制组的内容补充:kill -9 3286  --> '干掉服务进程'

cpu子系统各文件含义

1、前面讲解了'​​cpu.cfs_quota_us'​​和'​​cpu.cfs_period_us'​​参数来限制'CPU使用'

2、​​cpu.shares​​  --> 按'权重比例'设定 CPU 的分配1)定义了cgroup在竞争CPU资源时'相对于其他cgroup'的'优先级'2) 默认值为'1024',范围从2到262144eg: 【1】如 cgroup A 设置 100,cgroup B 设置 300,那么cgroup A中的task运行 25% 的 CPU 时间【2】对于一个 4 核 CPU 的系统来说,cgroup A 中的 task 可以 100% 占有某一个 CPU备注:这个比例是'相对整体'的一个值

3、cpu.stat:'统计信息',包含:1)nr_periods      (表示经历了几个cfs_period_us周期)2)nr_throttled    (表示 task 被限制的次数)3)及throttled_time(表示 task 被限制的总时长)

 

4、'cpuacct' 控制选项备注:这个子系统的配置是'cpu子系统的补充',提供 CPU '资源用量的统计',时间单位都是'纳秒'

5、'cpuset' 控制选项  --> '指定进程绑定cpu'备注:'/sys/fs/cgroup/cpuset' 文件

 

http://www.dtcms.com/a/300599.html

相关文章:

  • 人工智能与城市:城市生活的集成智能
  • ProtoBuf序列化技术详解与实战指南
  • Model 组件的基本组成
  • vuhub jangow-01-1.0.1靶场攻略
  • 最优估计准则与方法(6)递推最小二乘估计(RLS)_学习笔记
  • 阻止网页重定向
  • 昇思学习营-【模型推理和性能优化】学习心得_20250730
  • 【QT入门到晋级】window opencv安装及引入qtcreator(包含两种qt编译器:MSVC和MinGW)
  • 系统整理Python的循环语句和常用方法
  • RabbiteMQ安装-ubuntu
  • XSS利用
  • 适配IE11(通过Babel+core-js转译ES6语法)
  • 神经网络模型训练需要的内存大小计算方法
  • 智能化设备健康管理:中讯烛龙预测性维护系统引领行业变革
  • 数学建模——模糊综合评价
  • 如何在 Ubuntu 24.04 或 22.04 中更改 SSH 端口
  • 一分钟部署一个导航网站
  • QTableView 使用实例(1)
  • Cursor下利用Stagewise实现 “所见即改” 的前端开发体验~
  • Java全栈面试实战:从JVM到AI的技术演进之路
  • 数据结构--优先级队列(堆)
  • 【网络协议安全】任务15:DHCP与FTP服务全配置
  • 点击劫持:潜藏在指尖的安全陷阱
  • Python异步下载实战:asyncio + aiohttp 性能碾压同步请求
  • 算法竞赛阶段二-数据结构(37)数据结构循环链表模拟实现
  • ios UIAppearance 协议
  • CodeBLEU:面向代码合成的多维度自动评估指标——原理、演进与开源实践
  • 笔记本键盘的启用和禁用
  • Python Pandas.cut函数解析与实战教程
  • ASP.NET Core 高并发万字攻防战:架构设计、性能优化与生产实践