cgroup基本原理与使用

news2024/9/22 18:12:36

Linux cgroups是Linux内核中的一项强大功能,允许用户对进程进行**资源限制、优先级控制、监控和隔离。它主要用于管理和控制计算资源的分配,特别是在容器技术(如 Docker 和 LXC)中得到了广泛应用。

1. Cgroups的基本概念和原理

1.1 资源控制和管理

cgroups的基本功能是将一组进程划分为一个组(控制组),并对这个组分配特定的资源。这些资源主要包括:

- CPU(处理器时间)
- 内存(RAM 和 swap 空间)
- I/O(磁盘和网络带宽)
- 进程数(控制同时运行的进程/线程数量)
- 设备访问控制(控制进程可以访问的设备)

每个cgroup可以对进程的这些资源进行限制和控制,内核会根据cgroup的配置在运行时对资源进行调度。

1.2 cgroup 的层次结构

cgroups具有层次结构,类似于文件系统的层次树。每个cgroup可以包含多个子cgroup,资源控制是自上而下继承的:

- 根cgroup:系统的默认组,包含所有进程。
- 子cgroup:可以从根cgroup创建子控制组,并继承上层组的资源限制。

进程可以分配到任何层次的cgroup中,每个子cgroup可以进一步对资源进行细化限制。

2. cgroups的组成部分

cgroups由以下两个主要组成部分构成:

2.1 cgroup控制器

控制器是cgroups的核心部分,负责实际管理不同类型的资源。常见的控制器包括:

- cpu:控制进程的CPU时间使用。
- cpuacct:对进程的CPU使用情况进行统计。
- memory:限制进程使用的内存大小。
- blkio:控制进程对块设备(磁盘)的 I/O 操作。
- devices:控制进程可以访问哪些设备。
- freezer:挂起或恢复cgroup中的所有进程。

每个控制器都可以单独挂载并使用不同的限制方式。

2.2 Linux cgroup内存子系统

cgroups通过一个虚拟文件系统来暴露接口,称为cgroupfs。这个虚拟文件系统通常挂载在 `/sys/fs/cgroup/`,通过这个文件系统,用户可以:

- 创建、修改和删除cgroup。
- 设置资源限制。
- 监控cgroup的资源使用情况。

在cgroupfs中,每个资源控制器会以不同的子目录存在,例如:


/sys/fs/cgroup/cpu/
 

每个子目录会包含一些特殊文件,这些文件用来配置和管理资源限制,比如 `cpu.shares` 文件用来定义 CPU 共享比例。

3. Cgroups 的基本操作

3.1 创建cgroup

通过在 cgroupfs 中创建一个新目录,可以创建一个新的 cgroup。这个目录中的文件用来表示资源限制和当前的资源使用情况。例如:


mkdir /dev/memcg/mygroup

这将创建一个名为 `mygroup` 的新控制组,详情如下:

解释:

1. cgroup.clone_children

说明:是否自动将子进程添加到与父进程相同的 cgroup。如果设置为 1,子进程将自动继承父进程的 cgroup 设置。
值:0 或 1。
2. cgroup.event_control

说明:用于控制和管理 cgroup 事件通知机制的文件,通常用于与外部监控系统进行事件触发交互。
3. cgroup.procs

说明:列出当前 cgroup 中所有进程的 PID。可以通过写入 PID 来将某个进程移入该 cgroup。
4. cgroup.sane_behavior

说明:用于指示是否启用了更合理的行为配置(通常与 cgroup v2 或内核的一些新特性有关)。
内存子系统参数
5. memory.failcnt

说明:记录自启动以来,因超出内存限制而失败的内存分配次数。
6. memory.force_empty

说明:写入该文件会尝试释放该 cgroup 中所有不再需要的内存,通常用于手动回收内存。
7. memory.kmem.failcnt

说明:记录内核内存(kmem)分配失败的次数。
8. memory.kmem.limit_in_bytes

说明:限制该 cgroup 可用的内核内存(包括 slab 分配)的上限。
9. memory.kmem.max_usage_in_bytes

说明:自启动以来该 cgroup 中内核内存使用的峰值。
10. memory.kmem.slabinfo

说明:提供内核 slab 分配器的信息,帮助诊断和分析内核内存的使用情况。
11. memory.kmem.tcp.failcnt

说明:记录 TCP 缓存内存分配失败的次数。
12. memory.kmem.tcp.limit_in_bytes

说明:限制该 cgroup 中 TCP 缓存的最大内存使用量。
13. memory.kmem.tcp.max_usage_in_bytes

说明:自启动以来该 cgroup 中 TCP 缓存使用的峰值内存。
14. memory.kmem.tcp.usage_in_bytes

说明:当前该 cgroup 中 TCP 缓存的内存使用量。
15. memory.kmem.usage_in_bytes

说明:当前该 cgroup 中使用的内核内存大小。
16. memory.limit_in_bytes

说明:设置该 cgroup 可使用的物理内存上限(不包括 swap)。超出此值时,内存分配将失败,进程可能会被 OOM 杀死。
17. memory.max_usage_in_bytes

说明:记录自启动以来该 cgroup 的最大物理内存使用量。
18. memory.memsw.failcnt

说明:记录该 cgroup 中物理内存加 swap 内存的分配失败次数。
19. memory.memsw.limit_in_bytes

说明:设置该 cgroup 可使用的物理内存和 swap 的总和上限。
20. memory.memsw.max_usage_in_bytes

说明:自启动以来该 cgroup 使用的最大物理内存加 swap 内存。
21. memory.memsw.usage_in_bytes

说明:当前该 cgroup 中物理内存和 swap 的使用总量。
22. memory.move_charge_at_immigrate

说明:控制当进程迁移到一个新的 cgroup 时是否将其当前的内存使用量一起迁移。可用于控制内存计费策略。
23. memory.numa_stat

说明:显示该 cgroup 中内存的 NUMA(非一致性内存访问)节点的使用统计信息。
24. memory.oom_control

说明:控制是否启用 OOM(Out Of Memory)保护。当设置为启用时,可以避免 cgroup 中的进程被 OOM 杀死。
25. memory.pressure_level

说明:显示内存压力的水平,用于调节系统在内存紧张时的响应行为。
26. memory.soft_limit_in_bytes

说明:设置该 cgroup 的内存软限制,允许 cgroup 在有剩余内存时使用更多的内存,但当系统内存紧张时会首先回收超出部分。
27. memory.stat

说明:提供该 cgroup 的详细内存使用统计信息,包括匿名内存、缓存、RSS 和 slab 等。
28. memory.swappiness

说明:控制该 cgroup 的内存换出到 swap 的倾向,值在 0 到 100 之间,数值越大表示更倾向于将内存换出到 swap。
29. memory.usage_in_bytes

说明:当前该 cgroup 的物理内存使用量(不包括 swap)。
30. memory.use_hierarchy

说明:控制是否启用内存 cgroup 的层次结构行为。如果启用,子 cgroup 会继承父 cgroup 的内存限制。

其他控制文件
1. notify_on_release

说明:当该 cgroup 中的最后一个任务退出时,是否发送通知。如果设置为 1,当所有进程退出时,系统会发出释放通知。
2. release_agent

说明:定义一个可执行文件的路径,当所有进程从 cgroup 中移除时执行该文件。
3. tasks

说明:列出当前 cgroup 中所有进程的 PID,并可以通过向其中写入 PID 将某个进程移入该 cgroup。

常用操作如下介绍:

3.2 将进程加入cgroup

通过将进程的PID写入 cgroup.procs文件,可以将该进程分配到对应的cgroup中:


echo PID号 >  /dev/memcg/mygroup/cgroup.procs

这将PID的进程加入到 `mygroup` 中。

3.3 设置内存限制

通过写入文件,可以对 cgroup 设置资源限制。例如,为 `mygroup` 设置 CPU 使用权重:


echo 50M >  /dev/memcg/mygroup/memory.limit_in_bytes
 

监控到的进程,如果使用的内存超过50M,就会触发swap交换(如果有配置)

4. cgroups v1 和 cgroups v2

Linux cgroups有两个版本:cgroups v1和cgroups v2。大多数Linux发行版仍然支持cgroups v1,但新系统通常推荐使用cgroups v2,它引入了一些重要改进:

- 统一层次结构:cgroups v2采用了统一的层次结构,将所有控制器放在同一个层级下,而不是像 v1 那样分散在不同的子系统中。
- 更好的资源隔离和控制:v2具有更强的资源控制能力,减少了v1中的一些设计缺陷。

在cgroups v2中,虚拟文件系统通常挂载在`/sys/fs/cgroup/`,并且不同控制器的文件不再分散,而是统一到一个cgroup目录下。

5. cgroups 的应用场景

- 容器管理:在容器技术中,cgroups 用来为每个容器设置资源配额,确保容器间的资源隔离。
- 虚拟化:通过 cgroups,可以在虚拟化环境中对虚拟机进行资源控制。
- 多租户环境:在云计算环境中,cgroups 可以为每个租户分配适当的资源,确保不同用户的隔离。
- 系统资源管理:cgroups 可以用于限制和监控本地系统中的进程资源使用,防止进程过度使用系统资源导致宕机。

总结

Linux cgroups 提供了一种强大的机制,用于限制、监控和隔离系统中不同进程组的资源使用。通过 cgroups,管理员可以确保系统资源的合理分配,并防止单个进程或进程组占用过多资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qwen-2.5 + ClaudeDev + Aider:这套免费的AI编程工具链,简直太棒了!

Qwen-2.5 ClaudeDev Aider:这套免费的AI编程工具链,简直太棒了! 原创 Aitrainee AI进修生 🍹 Insight Daily 🪺 Aitrainee | 公众号:AI进修生 Hi,这里是Aitrainee,欢迎阅读本…

AI字幕翻译器行业分析:前五大厂商占有大约29.5%的市场份额

AI 字幕翻译器正在彻底改变我们使用不同语言消费媒体的方式,使内容可以普遍访问。这些先进的技术利用机器学习和自然语言处理,将口语对话实时翻译成字幕。这一功能不仅打破了语言障碍,提升了观众的体验,而且还使内容创作者能够毫不…

比 Kimi 更强!用 Claude 仿写头条文章,轻松过原创(附完整指令)

最近,我有个做头条号的朋友跟我吐槽,说每天都要更新内容,经常写文章写到半夜,他已经快撑不住了。我听完实在有点不忍心,就告诉他,其实可以用 AI 来帮忙写头条文章。 朋友一脸怀疑,说“怎么可能&…

消灭病毒gamedemo

DestoryVirus 一、AudioSourceManager using System.Collections; using System.Collections.Generic; using UnityEngine;public class AudioSourceManager : MonoBehaviour {public static AudioSourceManager Instance { get; private set; }public SoundPlayer soundPla…

【C++】智能指针模拟实现及详解

目录 什么是智能指针: 为什么要有智能指针: auto_ptr: unique_ptr: shared_ptr: shared_ptr的缺陷: weak_ptr: 什么是智能指针: 概念: 智能指针是一种特殊的类模板,用于自动…

Java律师法律咨询小程序

技术:Java、Springboot、mybatis、Vue、Mysql、微信小程序 1.代码干净整洁,可以快速二次开发和添加新功能 2.亮点可以添加AI法律咨询作为 创新点 系统分:用户小程序端,律师web端和管理员端 用户可以在小程序端登录系统进入首…

机器学习之非监督学习(二)异常检测(基于高斯概率密度)

机器学习之非监督学习(二)异常检测(基于高斯概率密度) 0. 文章传送1.案例引入2.高斯正态分布3.异常检测算法4.异常检测 vs 监督学习5.算法优化 0. 文章传送 机器学习之监督学习(一)线性回归、多项式回归、…

VMware安装CentOS7及其初始化配置教程

安装准备 VMware Workstation Pro 17:下载及安装教程 CentOS 7下载地址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 创建虚拟机 安装CentOS7 鼠标点一下屏幕中间,就可以进入虚拟机,按向上箭头选择安装&#xff0…

EECS498 Deep Learning for Computer Vision (一)软件使用指南

#最近开始学习深度学习的相关基础知识,记录一下相关笔记及学习成果# learning:building artificial systems that learn from data and experience deep learning(a set of machine learning): hierarchical learning algorithms with many "laye…

【基础算法总结】模拟篇

目录 一,算法介绍二,算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三,算法总结 一,算法介绍 模拟算法本质就是"依葫芦画瓢",就是在题目中已经告诉了我们该如何操作…

helm安装promethues

1、添加 Helm 仓库: helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update 2、安装 Prometheus:安装promtheus到monitor名称空间中 kubectl create ns monitor helm search repo prometheus #查…

【WSL迁移】将WSL2迁移到D盘

首先查看WSL状态:wsl -l -v 以压缩包的形式导出到其他盘。 wsl --export Ubuntu D:\Ubuntu_WSL\ubuntu.tar 注销原有的linux系统 wsl --unregister Ubuntu 导入系统到D盘 wsl --import Ubuntu D:\Ubuntu_WSL D:\Ubuntu_WSL\Ubuntu.tar 恢复默认用户 Ubuntu co…

Python编码系列—Python策略模式:灵活应对变化的算法策略

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

后端-navicat查找语句(单表与多表)

表格字段设置如图 语句&#xff1a; 1.输出 1.输出name和age列 SELECT name,age from student 1.2.全部输出 select * from student 2.where子语句 1.运算符&#xff1a; 等于 >大于 >大于等于 <小于 <小于等于 ! <>不等于 select * from stude…

大学生必看!60万人在用的GPT4o大学数学智能体有多牛

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1…

Spring框架总体结构

1. Spring是什么 Spring 是一个开源框架 Spring 为简化企业级应用开发而生&#xff0c;使用 Spring 可以使简单的 JavaBean实现以前只有 EJB 才能实现的功能 Spring 是一个 IOC(DI) 和 AOP 容器框架 具体描述 Spring 轻量级&#xff1a;Spring 是非侵入性的 - 基于 Spring 开发…

【24华为杯数模研赛赛题思路已出】国赛B题思路丨附参考代码丨免费分享

2024年华为杯研赛B题解题思路 B题 WLAN组网中网络吞吐量建模 问题1 请根据附件WLAN网络实测训练集中所提供的网络拓扑、业务流量、门限、节点间RSSI的测试基本信息&#xff0c;分析其中各参数对AP发送机会的影响&#xff0c;并给出影响性强弱的顺序。通过训练的模型&#xff…

撤销与恢复的奥秘:设计模式之备忘录模式详解

备忘录模式 &#x1f3af; 备忘录模式&#xff08;Memento Pattern&#xff09;简介 备忘录模式 是一种行为型设计模式&#xff0c;用于保存对象的某一时刻状态&#xff0c;以便稍后可以恢复到该状态&#xff0c;而不破坏对象的封装性。备忘录模式将对象的状态封装在一个独立的…

技术周总结 09.16~09.22 周日(架构 C# 数据库)

文章目录 一、09.16 周一1.1&#xff09;问题01&#xff1a; 软件质量属性中"质量属性场景"、"质量属性环境分析"、"质量属性效用树"、"质量属性需求用例分析"分别是什么&#xff1f;1.2&#xff09;问题02&#xff1a; 软件质量属性中…

机器学习(1)sklearn的介绍和六个主要模块、估计器、模型持久化

文章目录 1.sklearn介绍2.sklearn的模块3.监督学习和无监督学习1. 监督学习 (Supervised Learning)例子 2. 无监督学习 (Unsupervised Learning)例子 4.估计器估计器的主要特性和方法包括&#xff1a;估计器的类型&#xff1a;示例&#xff1a;使用 scikit-learn 中的估计器 5.…