linux中 Systemd 和 cgroups 的关系详解

systemd 是 Linux 的一个初始化系统和服务管理器,它依赖于 Linux 内核的 cgroups(Control Groups)功能来实现对系统资源的高效管理。以下是对两者关系的详细解读:


1. 什么是 cgroups?

cgroups 是 Linux 内核提供的一种资源管理功能,允许将进程组织成组,并对这些组的资源使用进行限制和监控。它主要支持以下功能:

  • 资源限制:限制 CPU、内存、I/O 等资源的使用量。
  • 优先级分配:为不同的进程组分配不同的资源优先级。
  • 资源统计:监控资源使用情况。
  • 进程隔离:隔离不同进程的资源使用。
  • 冻结和恢复:暂停或恢复一组进程的执行。

2. systemd 中的 cgroups 支持

systemdcgroups 的核心用户之一,它通过 cgroups 来管理系统服务和用户会话。每当 systemd 启动一个服务时,它会为该服务创建一个专属的 cgroup,用于隔离和管理其资源。

特性:
  • 每个服务独立的 cgroup:每个通过 systemd 启动的服务都会在 cgroups 中创建一个层级(例如 /sys/fs/cgroup/system.slice/<service_name>.service)。
  • 支持 cgroups v1 和 v2systemd 支持 cgroups 的两种版本,cgroups v2 是默认的,提供了统一的资源控制接口。
  • 动态管理:可以在服务运行时动态调整其资源限制。

3. systemd 和 cgroups 的层次结构

在 systemd 中,服务、用户会话等都映射到 cgroups 的层次结构。主要的层次有:

  1. slice(切片)
    • 是 cgroups 的顶层分类,用于组织资源。
    • 常见的 slice:
      • system.slice:用于管理系统服务。
      • user.slice:用于管理用户会话。
      • machine.slice:用于管理虚拟机和容器。
  2. scope(作用域)
    • 一组相关的进程,但不由 systemd 启动。例如,通过 dbus 添加的用户会话。
  3. service(服务)
    • systemd 管理的服务,每个服务都对应一个 cgroup。
示例路径:
  • /sys/fs/cgroup/system.slice/sshd.servicesshd 服务的 cgroup。
  • /sys/fs/cgroup/user.slice/user-1000.slice:用户 ID 为 1000 的用户会话。

4. 常用配置和操作

配置文件:

systemd 提供了一些参数用于配置服务的资源控制,它们通常放在 .service 文件中,例如:

  • CPU 限制
    • CPUQuota=:限制服务的 CPU 使用百分比。例如,CPUQuota=50% 表示最多使用 50% 的 CPU。
  • 内存限制
    • MemoryLimit=:限制服务的最大内存使用量。
  • I/O 限制
    • IOWeight=:设置服务的 I/O 权重。
运行时管理:

通过 systemctlsystemd-cgls 工具可以查看和管理 cgroups:

  • 查看服务状态及其资源限制:
    systemctl status <service_name>
  • 查看 cgroups 层次结构:
    systemd-cgls
  • 动态调整资源:
    systemctl set-property <service_name> MemoryLimit=500M

5. cgroups v2 的改进

在 cgroups v2 中,资源控制接口被统一,不再像 v1 那样分为多个子系统(subsystems)。主要改进包括:

  • 单一层次结构:所有 cgroup 控制器共享一个层次。
  • 更简单的 API:统一的资源配置文件格式,便于管理。
  • 更强的隔离:子 cgroup 无法影响父 cgroup 的行为。

systemd 对 cgroups v2 的支持已经非常成熟,并在现代发行版中默认启用。


6. 实战案例:限制服务资源

nginx.service 为例,限制其 CPU 使用为 50%,内存为 512MB:

  1. 编辑配置:
    systemctl set-property nginx.service CPUQuota=50% systemctl set-property nginx.service MemoryLimit=512M
  2. 重启服务:
    systemctl restart nginx.service
  3. 查看限制:
    systemctl show nginx.service | grep -E "CPUQuota|MemoryLimit"

通过结合 systemdcgroups,Linux 系统可以实现强大的资源管理和隔离,适用于服务的性能优化和稳定性保障。

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

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

相关文章

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…

爬取豆瓣电影的数据-----爬虫实战案例(爬取文字)

爬取豆瓣电影的数据 首先打开"豆瓣电影TOP250"网页&#xff1a; 右击鼠标&#xff0c;找到检查点击&#xff0c;然后再点击网络向上拉动&#xff0c;找到名称栏中的第一个&#xff0c;点击打开可以在标头里看到请求URL和请求方式&#xff0c;复制URL&#xff08;需…

MySQL 8.0 新特性汇总

文章目录 前言1. 运维管理 1.1 可持久化变量1.2 管理员端口1.3 资源组1.4 数据库粒度只读1.5 show processlist 实现方式1.6 加速索引创建速度1.7 控制连接的内存使用量1.8 克隆插件1.9 mysqldump 新增参数1.10 慢日志增强1.11 快速加列1.12 InnoDB 隐藏主键1.13 Redo 配置1.14…

使用PHPUnit使用本地调试代替远程调试,快速提高开发效率

Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架&#xff0c;但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…

【NLP 11、Adam优化器】

祝你先于春天&#xff0c; 翻过此间铮铮山峦 —— 24.12.8 一、Adam优化器的基本概念 定义 Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种基于梯度的优化算法&#xff0c;用于更新神经网络等机器学习模型中的参数。它结合了动量法&#xff08;Momentum&…

【BUG】VMware|vmrest正在运行此虚拟机,无法配置或删除快照

VMware版本&#xff1a;VMware 16 文章目录 省流版问题解决方案 详细解释版问题解决方案总结 省流版 问题 只读&#xff0c;因为vmrest正在运行虚拟机。 解决方案 参考&#xff1a;虚拟机设置&#xff0c;只读&#xff0c;因为vmrest正在运行此虚拟机。有谁遇到过这种问题吗&…

HTML表单-第二部分

HTML表单 表单元素是允许用户在表单中输入内容&#xff0c;比如&#xff1a;文本域&#xff0c;下拉列表&#xff0c;单选框&#xff0c;复选框等等‘ 使用<from>标签创建 例如 <from> . input . </from> HTML表单-输入元素 <input>标签创建&#xff…

声音克隆GPT-SoVITS

作者&#xff1a;吴业亮 博客&#xff1a;wuyeliang.blog.csdn.net 一、原理介绍 GPT-SoVITS&#xff0c;作为一款结合了GPT&#xff08;生成预训练模型&#xff09;和SoVITS&#xff08;基于变分信息瓶颈技术的歌声转换&#xff09;的创新工具&#xff0c;正在声音克隆领域掀…

008-MAC地址表配置

MAC地址表配置 MAC地址表中对于接口的相关配置&#xff0c;目前只能在二层以太网端口、二层聚合接口等二层接口上进行。本章节内容只涉及单播的静态、动态、黑洞MAC地址表项的配置。有关静态组播MAC地址表项的相关介绍和配置内容&#xff0c;请参见“IP组播配置指导”中的“IGM…

2024-10-13-B fd 重定向 缓冲区

1 一切皆文件 1.1 虚拟文件系统 在系统层面&#xff0c;做了一层软件的封装&#xff0c;struct file 里有操作表&#xff08;即函数指针的集合&#xff09;&#xff0c;可以调用底层的读写方法。虚拟文件系统&#xff08;VFS&#xff09;是一种神奇的抽象&#xff0c;它使得…

Metasploit使用

最近在学Metasploit&#xff0c;Metasploit是一个免费的、可下载的渗透测试框架&#xff0c;通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击&#xff0c;是一个集成了渗透测试全流程的渗透工具。 图一 模块&#xff1a;模块组织按照不同的用途分为7种类型的模块 &am…

Github 2024-12-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2024-12-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目9Go项目2HTML项目1Shell项目1Jupyter Notebook项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Py…

Eclipse IDE 各个版本的用途和区别

Eclipse官方下载地址:https://www.eclipse.org/downloads/packages/ 会出现很多个Eclipse版本,初学者可能会感觉到很迷惑,不知道下载哪个版本。 Eclipse IDE for Enterprise Java and Web Developers (544 MB) 专为 Java 和 Web 应用开发者设计 包含 Java IDE、JavaScript、…

MongoDB集群的介绍与搭建

MongoDB集群的介绍与搭建 一.MongoDB集群的介绍 注意&#xff1a;Mongodb是一个比较流行的NoSQL数据库&#xff0c;它的存储方式是文档式存储&#xff0c;并不是Key-Value形式&#xff1b; 1.1集群的优势和特性 MongoDB集群的优势主要体现在以下几个方面&#xff1a; (1)高…

切尔诺夫界:概率界限的精确利器

切尔诺夫界&#xff1a;概率界限的精确利器 背景 在概率论中&#xff0c;切尔诺夫界&#xff08;Chernoff Bound&#xff09; 是一种强大的工具&#xff0c;它通过引入指数函数&#xff0c;能够为随机变量的大偏差概率提供更加精确的界限。相比于马尔科夫不等式和切比雪夫不等…

STM32:实现ping命令(lwip)

目录 1.实现步骤2.源码分析2.1 初始化函数2.2 发送函数2.3 回调函数2.3.1 函数定义:2.3.2 解析数据包:2.3.3.处理ICMP数据包:2.3.4 资源释放:2.3.5 返回值:3.源码展示4.源码链接5.问题排查解决问题1:MCU发送ping后,没有回复1.实现步骤 在STM32上使用LwIP库实现ping功能…

Facebook:筑牢隐私安全堡垒,守护社交净土

在全球社交媒体平台中&#xff0c;Facebook一直是风靡全球的佼佼者。然而&#xff0c;随着数字化信息的迅速膨胀&#xff0c;用户隐私保护的重要性日益凸显。面对用户对数据安全性的高度重视&#xff0c;Facebook致力于通过一系列措施来确保隐私保护&#xff0c;守护每位用户的…

【flutter】Flutter项目集成第三方sdk总结

实现方式 在Android层启动sdk在flutter代码中 通过原生通信执行sdk集成的方法 一、在Android层集成SDK&#xff08;kotlin&#xff09; 说明&#xff1a;一般sdk集成会要求设置集成模式后启动sdk&#xff0c;因此使用attachBaseContext和onCreate来实现SDK集成。 override f…

最新道客巴巴怎么免费下载文档方法

一、利用浏览器插件 插件自动识别下载&#xff1a;对于经常需要下载道客巴巴文档的人来说&#xff0c;安装浏览器插件是不错的选择。如Chrome浏览器上的一些插件&#xff08;如PDF在线转换器等&#xff09;&#xff0c;安装后&#xff0c;在浏览器中打开道客巴巴文档&#xff…

多系统萎缩锻炼如何好起来?

多系统萎缩&#xff08;Multiple System Atrophy, MSA&#xff09;是一种复杂的神经系统退行性疾病&#xff0c;影响着患者的自主神经系统、运动系统和平衡功能等多个方面。面对这一挑战&#xff0c;科学、合理的锻炼对于缓解症状、提高生活质量至关重要。本文将详细介绍多系统…