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/
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
| echo "252:0 rbps=104857600" > /sys/fs/cgroup/user.slice/io.max
|
3. 测试读
1 2 3 4 5 6
| time dd if=/dev/vda of=/dev/null bs=1M
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
|