使用 cgroups 控制系统资源

Posted by BlkArt on August 15, 2016

简单记录几个使用 cgroups 控制系统资源的例子

测试环境:CentOS 7

管理进程 CPU 资源

  • 耗 CPU 资源的测试脚本
#!/bin/bash
# filename: test_cpu.sh

x=0
while [ True ];do
    x=$x+1
done
  • 运行脚本,查看对应进程 CPU 使用情况
# top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND         
19235 root      20   0  113272   1672   1232 R  98.2  0.0   0:11.88 test_cpu.sh

从以上输出信息中可以看到,脚本运行对应的进程 CPU 使用率已经接近 100%

  • 使用 cgroups 限制这个进程对 CPU 资源的使用
# mkdir /sys/fs/cgroup/cpu/test_cpu/
# echo 50000 > /sys/fs/cgroup/cpu/test_cpu/cpu.cfs_quota_us
# echo 19235 > /sys/fs/cgroup/cpu/test_cpu/tasks
  • 再次查看脚本运行对应的进程 CPU 使用率
# top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND         
19235 root      20   0  114788   2932   1232 R  49.8  0.1   5:34.82 test_cpu.sh

管理进程 MEM 资源

#!/bin/bash
# filename: test_mem.sh

x='a'
while [ True ];do
    x=$x$x
done
  • 运行脚本,查看对应进程 MEM 使用情况
# top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND         
26459 root      20   0 3258888 1.430g   1236 R  33.8 37.1   0:45.42 test_mem.sh

从以上输出信息中可以看到,脚本运行对应的进程 MEM 使用率已经打到 37.1%

  • 使用 cgroups 限制这个进程对 MEM 资源的使用
# mkdir /sys/fs/cgroup/memory/test_mem
# echo 1048576 > /sys/fs/cgroup/memory/test_mem/memory.limit_in_bytes
# echo 26459 > /sys/fs/cgroup/memory/test_mem/tasks
  • 再次查看脚本运行对应的进程 MEM 使用率
# top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND         
26459 root      20   0 3258888 1.430g   1236 D  33.8 37.1   0:45.42 test_mem.sh

管理进程 IO 资源

  • 执行消耗 IO 的命令,查看对应进程 IO 资源的使用情况
dd if=/dev/sda of=/dev/null
# iotop
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                       
28103 be/4 root      190.80 M/s    0.00 B/s  0.00 % 35.94 % dd if=/dev/vda of=/dev/null
  • 使用 cgroups 限制这个进程对 IO 资源的使用
# mkdir /sys/fs/cgroup/blkio/test_blkio
# ls -l /dev/vda
brw-rw---- 1 root disk 252, 0 8月   3 16:34 /dev/vda
# echo '252:0 1048576' > /sys/fs/cgroup/blkio/test_blkio/blkio.throttle.read_bps_device
# echo 28103 > /sys/fs/cgroup/blkio/test_blkio/tasks
  • 再次查看命令运行对应的进程 IO 资源的使用情况
# iotop
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                 
28103 be/4 root     1880.24 K/s    0.00 B/s  0.00 % 99.99 % dd if=/dev/vda of=/dev/null