本文共 1327 字,大约阅读时间需要 4 分钟。
cgroup基本概念
cgroup是什么
cgroups(控制组)是一种Linux内核模块,用于对系统进程进行分组化管理的功能。它允许系统管理员对一组进程进行统一的资源管理和限制,从而更好地控制系统资源的分配和使用。
cgroup解决的问题
在Linux系统中,进程之间的资源竞争可能导致资源分配不均,部分场景下需要对重要进程进行资源保护。cgroups的引入解决了这一问题,通过对进程进行分组,可以限制每个组的资源使用,如内存、CPU、磁盘IO等,从而保障关键进程的稳定运行。
cgroup的主要功能
资源限制:设置进程组对特定资源的使用上限,如内存使用限制。 优先级控制:通过CPU和磁盘IO限制,确保某些进程获得更高的资源优先级。 资源统计:提供资源使用统计信息,便于审计和分析。 进程控制:支持进程的暂停和恢复,用于资源调度。 cgroup适用的场景
资源预分配:确保重要进程获得足够的资源。 进程隔离:将一组进程单独管理,如Nginx等服务进程。 资源限制:为进程组设置内存、CPU、磁盘存储等使用限制。 网络和设备管理:限制进程对网络带宽和特定设备的访问。 cgroup能够操控的资源
- CPU使用率
- 内存使用限制
- 磁盘IO吞吐量
- 网络带宽
- 设备访问权限
- 进程数量限制
- HugePages使用限制
- 性能事件监控
cgroup的结构
cgroups的组织架构包括:
Hierarchy:层级结构,支持嵌套管理。 Attributes:每个cgroup节点包含一系列属性,如task
和资源子系统配置。 Subsystems:提供具体资源控制功能,目前支持12种子系统,如cpu
、memory
、cpuset
等。 cgroup支持的子系统
cpu:限制CPU使用率。 cpuacct:统计CPU使用情况。 cpuset:绑定CPU和NUMA节点。 memory:管理内存使用。 devices:限制设备访问权限。 freezer:控制进程暂停和恢复。 net_cls:管理网络包类别标记。 blkio:限制块设备IO速度。 perf_event:性能事件监控。 net_prio:网络接口访问优先级。 hugetlb:管理HugePages使用。 pids:限制进程总数。 cgroup文件系统挂载
cgroups基于内核虚拟文件系统操作,挂载后可在/sys/fs/cgroup
目录下管理。操作步骤如下:
创建挂载目录,如mkdir /my/cgroup
。 挂载命令:mount -t cgroup ...
。 查看cgroup内容
进入cgroups目录可看到各组进程信息,如/etc/cgroups
下的各个cgroup文件夹。
查看进程所属cgroup
使用ps
命令查看进程组信息,如ps -cgroup
。
cgroup实例
例如,限制Nginx进程使用50%的CPU:
创建cgroup:mkdir -p /my/cgroup/nginx
. 配置CPU限制:echo 50 > /my/cgroup/nginx/cpuset.cfs_period_us
. 挂载并运行Nginx。 通过这些操作,管理员可以更好地管理系统资源,保障关键服务的稳定运行。
转载地址:http://qtzfk.baihongyu.com/