cgroup:Linux的资源控制机制

文章目录

  • [1 cgroup 的主要功能](#1 cgroup 的主要功能)
    • [1.1 资源限制](#1.1 资源限制)
    • [1.2 优先级控制](#1.2 优先级控制)
    • [1.3 资源隔离](#1.3 资源隔离)
    • [1.4 资源监控](#1.4 资源监控)
  • [2 cgroup 的层次结构](#2 cgroup 的层次结构)
  • [3 cgroup 子系统](#3 cgroup 子系统)
  • [4 示例:使用 cgroup 控制 CPU 和内存](#4 示例:使用 cgroup 控制 CPU 和内存)
    • [4.1 创建 cgroup](#4.1 创建 cgroup)
    • [4.2 设置资源限制](#4.2 设置资源限制)
    • [4.3 将进程添加到 cgroup](#4.3 将进程添加到 cgroup)
  • [5 使用 systemd 管理 cgroup](#5 使用 systemd 管理 cgroup)
  • [6 总结](#6 总结)
  • 参考链接
  • 封面

cgroup是Linux内核提供的一种机制,用于限制、记录和隔离进程组的资源使用情况。

1 cgroup 的主要功能

1.1 资源限制

cgroup可以限制进程组可以使用的资源量,如CPU、内存、磁盘I/O等。

1.2 优先级控制

设置进程组的优先级,确保关键任务优先获得资源。

1.3 资源隔离

将不同进程组的资源使用情况隔离开,防止一个进程组的资源消耗影响到另一个。

1.4 资源监控

监控和记录进程组的资源使用情况,便于分析和优化。

2 cgroup 的层次结构

cgroup 采用层次结构(hierarchy),通过将节点组织成树状结构来管理资源。每个节点称为一个 cgroup,根节点为系统的初始 cgroup。每个 cgroup 可以包含若干子 cgroup,这样便于对进程进行分层管理。

3 cgroup 子系统

cgroup 支持多种子系统(也称为控制器),每个子系统负责管理一种或多种资源。常见的子系统包括:

  • cpu:限制和监控CPU使用情况。
  • cpuacct:记录CPU使用情况。
  • memory:限制和监控内存使用情况。
  • blkio:限制和监控块设备I/O使用情况。
  • net_cls:限制和监控网络带宽使用情况。
  • freezer:冻结和恢复进程。

4 示例:使用 cgroup 控制 CPU 和内存

以下是一个简单示例,展示如何使用 cgroup 控制 CPU 和内存资源。假设我们要创建一个 cgroup,并限制其中进程的CPU使用率为50%,内存使用量为100MB。

4.1 创建 cgroup

shell 复制代码
sudo mkdir /sys/fs/cgroup/cpu/mygroup
sudo mkdir /sys/fs/cgroup/memory/mygroup

4.2 设置资源限制

shell 复制代码
# 限制 CPU 使用率为 50%
echo 50000 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo 100000 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us

# 限制内存使用量为 100MB
echo 100M | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes

4.3 将进程添加到 cgroup

假设我们有一个进程ID为 1234,要将其添加到 mygroup

shell 复制代码
echo 1234 | sudo tee /sys/fs/cgroup/cpu/mygroup/tasks
echo 1234 | sudo tee /sys/fs/cgroup/memory/mygroup/tasks

这样,进程 1234 的CPU使用率将被限制在50%以内,内存使用量被限制在100MB以内。

5 使用 systemd 管理 cgroup

在现代Linux发行版中,systemd 已经集成了对 cgroup 的管理。你可以通过 systemd 的服务单元文件(service unit file)来定义资源限制。例如,创建一个名为 myservice.service 的服务单元文件:

ini 复制代码
[Unit]
Description=My Service

[Service]
ExecStart=/path/to/your/application
CPUQuota=50%
MemoryLimit=100M

[Install]
WantedBy=multi-user.target

然后使用 systemctl 命令启动和管理服务:

shell 复制代码
sudo systemctl daemon-reload
sudo systemctl start myservice

6 总结

  • cgroup 是什么:cgroup 是Linux内核提供的机制,用于限制、记录和隔离进程组的资源使用。
  • 主要功能:资源限制、优先级控制、资源隔离和资源监控。
  • 层次结构:cgroup 采用树状层次结构,便于分层管理进程。
  • 子系统:cgroup 支持多个子系统,每个子系统负责管理一种资源。
  • 示例 :通过命令行创建和管理 cgroup,或者使用 systemd 集成管理。

参考链接

封面

由 DALL-E-3 生成

相关推荐
阿常呓语8 分钟前
ls 命令详解
linux·运维·服务器·ls
倔强的石头10617 分钟前
【Linux指南】基础IO系列(一)Linux 文件本质揭秘 —— 从 “磁盘文件” 到 “一切皆文件”
linux·运维·服务器
robitmind17 分钟前
操作input子系统,用模拟按键输入解锁ubuntu锁屏
linux·运维·ubuntu
2023自学中17 分钟前
imx6ull , 4.3寸800*480屏幕,触摸芯片型号 gt9147,显示触摸点的坐标数据
linux·嵌入式硬件
落羽的落羽20 分钟前
【Linux系统】文件IO:理解文件描述符、重定向、缓冲区
linux·服务器·开发语言·数据结构·c++·人工智能·机器学习
xie_pin_an21 分钟前
Linux 基础入门:从历史到核心指令全解析
linux·运维·服务器
ajole24 分钟前
Linux学习笔记——基本指令
linux·服务器·笔记·学习·centos·bash
嵌入小生00725 分钟前
数据结构与算法 | 完全二叉树的实现、哈希表的实现
linux·c语言·数据结构·算法·vim·嵌入式
晨非辰1 小时前
Linux包管理器速成:yum/apt双精要/镜像源加速/依赖解析30分钟通解,掌握软件安装的艺术与生态哲学
linux·运维·服务器·c++·人工智能·python
碎梦归途9 小时前
思科网络设备配置命令大全,涵盖从交换机到路由器的核心配置命令
linux·运维·服务器·网络·网络协议·路由器·交换机