Cgroup 能限制的指标
Cgroup 通过不同的“控制器”(Controller)来管理不同的资源。以下是核心的资源指标:
| 资源类型 | cgroup v1 控制器/文件 | cgroup v2 控制文件 | 主要作用 |
|---|---|---|---|
| CPU | cpu.shares cpu.cfs_quota_us cpu.cfs_period_us |
cpu.weight cpu.max |
相对权重:按比例分配 CPU 时间。 绝对限制:限制在单位时间内可使用的 CPU 时间上限,例如限制使用不超过 0.5 个核心。 |
| 内存 | memory.limit_in_bytes memory.swappiness |
memory.max memory.swap.max |
内存上限:限制进程组能使用的最大物理内存。 Swap 使用:限制最大可使用的 Swap 空间。 |
| 块设备 I/O | blkio.throttle.read_bps_device blkio.throttle.write_iops_device |
io.max |
读写速率 (BPS):限制对特定块设备(如 /dev/sda)的每秒读写字节数。 读写次数 (IOPS):限制每秒的读写操作次数。 |
| 进程数量 | pids.max |
pids.max |
PID 数量:限制 cgroup 内可以创建的最大进程(或线程)数量,防止 fork bomb。 |
| 网络 | net_cls / net_prio |
(与 eBPF 和 iptables 结合) |
网络带宽:标记网络数据包,然后配合流量控制工具(tc)进行限速。 网络优先级:设置数据包的优先级。 |
| 设备访问 | devices |
devices |
设备白名单/黑名单:控制 cgroup 内的进程能否访问特定设备文件(如 /dev/sda1, /dev/tty)。 |
给指定 PID 进行限制
mkdir /sys/fs/cgroup/my-limit.slice
# 将指定PID移入cgroup
echo "12345" >> /sys/fs/cgroup/my-limit.slice/cgroup.procs
# 限制0.2个核心使用
echo "20000 100000" > /sys/fs/cgroup/my-limit.slice/cpu.max
# 限制1.5个核心使用
echo "150000 100000" > /sys/fs/cgroup/my-limit.slice/cpu.max
# 限制500MB内存使用
echo "524288000" > /sys/fs/cgroup/my-limit.slice/memory.max
# 限制块设备io
ls -l /dev/vda
brw-rw---- 1 root disk 254, 0 Oct 21 22:18 /dev/vda
254,0为块设备号
# 限制读写带宽均为100MB/s,读写IOPS均为50
echo "254:0 wbps=104857600 wiops=50 rbps=104857600 riops=50" > /sys/fs/cgroup/my-limit.slice/io.max