Linux cgroup 简介

概述

Linux cgroup(Control Groups)是Linux内核提供的一种机制,用于限制、记录和隔离进程组的资源使用(如CPU、内存、磁盘I/O等)。它最初由Google工程师开发,后并入Linux内核主线,成为容器化技术(如Docker、LXC)的基础组件之一。

核心功能

资源限制:通过cgroup可以限制进程组的资源使用量,例如限制某个进程组最多使用50%的CPU或1GB内存。

优先级分配:为不同的进程组分配不同的资源优先级,例如确保高优先级任务获得更多CPU时间。

资源统计:监控进程组的资源使用情况,例如记录某个进程组的CPU时间、内存占用等。

进程隔离:将进程分组管理,确保各组之间的资源使用互不干扰。

基本结构

cgroup 通过虚拟文件系统(通常是 /sys/fs/cgroup)进行管理,每个子系统(如 cpu、memory、blkio)对应一个目录。用户可以通过创建子目录(即控制组)并修改其中的文件来配置资源限制。

示例目录结构:

复制代码
/sys/fs/cgroup/cpu/my_group/cpu.shares
/sys/fs/cgroup/memory/my_group/memory.limit_in_bytes

主要子系统

cpu:限制CPU使用时间或分配CPU份额。

cpuacct:统计CPU使用情况。

memory:限制内存使用并统计内存占用。

blkio:限制块设备(磁盘)I/O。

devices:控制进程对设备的访问权限。

freezer:暂停或恢复进程组。

使用 cgroup 的示例

限制进程的CPU使用
  1. 创建控制组:

    bash 复制代码
    mkdir /sys/fs/cgroup/cpu/my_group
  2. 设置CPU份额(默认1024,值越低优先级越低):

    bash 复制代码
    echo 512 > /sys/fs/cgroup/cpu/my_group/cpu.shares
  3. 将进程加入控制组:

    bash 复制代码
    echo $PID > /sys/fs/cgroup/cpu/my_group/tasks
限制进程的内存使用
  1. 创建控制组:

    bash 复制代码
    mkdir /sys/fs/cgroup/memory/my_group
  2. 设置内存限制(单位:字节):

    bash 复制代码
    echo 100000000 > /sys/fs/cgroup/memory/my_group/memory.limit_in_bytes
  3. 将进程加入控制组:

    bash 复制代码
    echo $PID > /sys/fs/cgroup/memory/my_group/tasks

cgroup v1 与 cgroup v2

cgroup v1:早期的实现,功能分散,多个子系统独立管理。

cgroup v2:重新设计,统一资源管理,更简洁高效。现代Linux发行版(如Ubuntu 20.04+、RHEL 8+)默认使用cgroup v2。

cgroup 与容器技术

Docker、Kubernetes等容器技术依赖cgroup实现资源隔离。例如,Docker通过 --cpus、--memory 等参数直接调用cgroup限制容器资源。

总结

cgroup 是Linux资源管理的核心机制,广泛应用于服务器、云计算和容器化环境。通过灵活配置,可以实现精细化的资源控制,提升系统稳定性和效率。

相关推荐
echome88818 分钟前
Linux 定时任务:crontab 写法与常见失效原因
linux·运维·网络·定时任务·crontab
老约家的可汗19 分钟前
Linux开发三件套:make、git、gdb 入门指南
linux·运维·服务器
从琳开始98931 分钟前
从Socket到TCP回显服务器:Java网络编程完整指南
java·服务器·网络·tcp/ip·java-ee
云-缩影1 小时前
做微信小程序,自建服务器还是用云托管:技术选型对比
服务器·微信小程序·小程序
分布式存储与RustFS1 小时前
可观测性数据落进对象存储:Proscia 案例拆解与 ClickHouse 自托管配置
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Sw1zzle1 小时前
Go入门(零):Linux Ubuntu 22.04 安装 Go
linux·ubuntu·golang
device_Any1 小时前
接口文档写着三个字段,接口返回了五个
android·java·linux
土星云SaturnCloud1 小时前
基于边缘计算与AI视觉的智慧街面治理方案:架构设计与场景落地
服务器·人工智能·ai·边缘计算
无足鸟ICT1 小时前
【RHCA+】dstat命令(监控系统资源)
linux·服务器
方便面不加香菜2 小时前
Docker Image-- 镜像命令详解与使用示例
运维·docker·容器