首页 » 漏洞 » cgroup 限制计算资源

cgroup 限制计算资源

 
文章目录

Cgroup 实现了对计算机资源使用上的隔离,它是 Docker 底层的基础技术。我们可以用它来限制程序使用的CPU、内存、磁盘。

安装

在 Ubuntu 14.04 下安装的方法:

sudo apt-get install cgroup-bin

安装完后执行 mount -t cgroup 会出现如下,可以看到它其实是一个文件系统

cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu) ... cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,relatime,hugetlb)

如果没有看到以上的目录,这时候需要手动 mount 了

cd /sys/fs mkdir cgroup mount -t tmpfs cgroup_root ./cgroup mkdir cgroup/cpuset mount -t cgroup -ocpuset cpuset ./cgroup/cpuset/ mkdir cgroup/cpu mount -t cgroup -ocpu cpu ./cgroup/cpu/ mkdir cgroup/memory mount -t cgroup -omemory memory ./cgroup/memory/

实践

我们来感性认识下 cgroup 吧,编写一个耗费 CPU 的程序,姑且叫暴走程序(baozou)

count = 0 while True:     count = count + 1 - 1 

运行该程序,top -p 之,100% CPU使用率

  PID      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 16515      20   0    2336    728    544 R  100.0  0.0   1:27.23 baozou 

我想限制暴走程序 CPU 使用该如何做? 我们手动创建一个 cgroup 目录来针对它。

cd /sys/fs/cgroup/cpu mkdir calm      // 名字可自定义 ls /calm        // 该目录下自动生产与 CPU 有关的文件 cgroup.clone_children  cpu.cfs_period_us  cpu.shares  notify_on_release cgroup.procs           cpu.cfs_quota_us   cpu.stat    tasks 

接着写入限制规则

// 默认是100000,20000意味着限制它的cpu为20% echo 20000 > /sys/fs/cgroup/cpu/calm/cpu.cfs_quota_us,  // 写入程序的 PID 16515 echo 16515 > /sys/fs/cgroup/cpu/calm/tasks 

于是 CPU 就降到 20% 。

  PID       PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 16515       20   0    2336    728    544 R  20.0  0.0   1:27.23 baozou 

除了这种需要指定 PID 来限制资源的方法,也可通过指定规则来执行,更显得方便,效果和上述一致。

sudo cgexec -g cpu:calm ./baozou 

可以看看这个限制规则做了什么?

$ sudo cgget calm calm: cpu.shares: 1024 cpu.cfs_quota_us: 20000 cpu.stat: nr_periods 6943     nr_throttled 6941     throttled_time 563080015831 cpu.cfs_period_us: 100000 

上述的例子中,我们手动创建了 calm , 其实也能通过命令来做到的

// 创建cgroup 文件目录 sudo cgcreate -g cpu:/calm -g memory:/calm  // 设置限制的参数 sudo cgset -r cpu.shares=200 calm  // 限制了内存 sudo cgset -r memory.limit_in_bytes=64k calm  // 可以删除 sudo cgdelete cpu/calm memory:/calm 

参考链接:

原文链接:cgroup 限制计算资源,转载请注明来源!

0