抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

cgroup2 是 Linux 内核中控制组(Control Groups,简称 cgroups)的一个新版本,它可以限制、记录和隔离进程组使用系统资源的方式,例如限制cpu使用率、内存使用限制、磁盘读写速率等等

一、限制磁盘读取速率

目前云服务器的标配磁盘基本都是最低配,读取速率普遍最高120M/s,为避免程序(例如 docker )把磁盘吃满导致服务器卡死,我们可以通过cgroup2限制磁盘读取速率

1. 查看磁盘

1
2
3
4
5
6
7
8
9
10
11
# 查看磁盘情况
ll /dev/block/

# 能够看到如下类似,云服务器一般都是vda,其中252:0就是磁盘序号
total 0
drwxr-xr-x 2 root root 280 May 29 20:16 ./
drwxr-xr-x 19 root root 3980 May 29 20:29 ../
lrwxrwxrwx 1 root root 6 May 29 20:16 252:0 -> ../vda
lrwxrwxrwx 1 root root 7 May 29 20:16 252:1 -> ../vda1
lrwxrwxrwx 1 root root 7 May 29 20:16 252:2 -> ../vda2
lrwxrwxrwx 1 root root 7 May 29 20:16 252:3 -> ../vda3

2. 限制磁盘

1
2
3
# 限制磁盘rbps=104857600,也就是读速率100M/s
echo "252:0 rbps=104857600" > /sys/fs/cgroup/user.slice/io.max
# 若取消限制则 rbps=max

3. 测试读

1
2
3
4
5
6
time dd if=/dev/vda of=/dev/null bs=1M

# 执行几秒后 ctrl+c 退出,就能看到统计情况,100MB/s基本符合限速
386+0 records in
385+0 records out
403701760 bytes (404 MB, 385 MiB) copied, 4.01225 s, 101 MB/s

二、限制其他

1. 限制磁盘写入

1
echo "252:0 wbps=104857600" > /sys/fs/cgroup/user.slice/io.max

2. 限制 CPU

这里设置的是一个CPU的配额和周期,具体数值需要根据你的系统和需求来调整。

1
2
echo 10000 > /sys/fs/cgroup/cpu/user.slice/cpu.cfs_quota_us
echo 20000 > /sys/fs/cgroup/cpu/user.slice/cpu.cfs_period_us

3. 限制内存上限

1
echo $((1024*1024*1024)) > /sys/fs/cgroup/memory/user.slice/memory.limit_in_bytes

评论