安装
操作系统:centos7
安装cgroup
[root@localhost ~]# yum install -y libcgroup-tools.x86_64
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.cqu.edu.cn
* updates: mirrors.cqu.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package libcgroup-tools.x86_64 0:0.41-21.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================================================
Package Arch Version Repository Size
================================================================================================================
Installing:
libcgroup-tools x86_64 0.41-21.el7 base 99 k
Transaction Summary
================================================================================================================
Install 1 Package
Total download size: 99 k
Installed size: 257 k
Downloading packages:
libcgroup-tools-0.41-21.el7.x86_64.rpm | 99 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : libcgroup-tools-0.41-21.el7.x86_64 1/1
Verifying : libcgroup-tools-0.41-21.el7.x86_64 1/1
Installed:
libcgroup-tools.x86_64 0:0.41-21.el7
Complete!
通过mount可以查看cgroup文件系统,系统默认挂载目录是/sys/fs/cgroup。
[root@localhost ~]# mount -t cgroup
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
当然也可以创建自定义目录,然后挂载到cgroup文件系统上。
mkdir -p /root/cgroup-test/
mount -t cgroup -o none,name=cgroup-test cgroup-test /root/cgroup-test/
一旦mount成功可以看到目录下多了一些文件
[root@localhost ~]# ls -l /root/cgroup-test/
total 0
-rw-r--r--. 1 root root 0 Mar 1 04:09 cgroup.clone_children
--w--w--w-. 1 root root 0 Mar 1 04:09 cgroup.event_control
-rw-r--r--. 1 root root 0 Mar 1 04:09 cgroup.procs
-r--r--r--. 1 root root 0 Mar 1 04:09 cgroup.sane_behavior
-rw-r--r--. 1 root root 0 Mar 1 04:09 notify_on_release
-rw-r--r--. 1 root root 0 Mar 1 04:09 release_agent
-rw-r--r--. 1 root root 0 Mar 1 04:09 tasks
同样也可以去/sys/fs/cgroup的各个子目录下去创建一个自己的目录,同样的创建成功后该目录下还是会多出一些文件。
[root@localhost cpu]# mkdir -p /sys/fs/cgroup/cpu/cpu-test/
[root@localhost cpu]# ls /sys/fs/cgroup/cpu/cpu-test/
cgroup.clone_children cpuacct.stat cpu.cfs_period_us cpu.rt_runtime_us notify_on_release
cgroup.event_control cpuacct.usage cpu.cfs_quota_us cpu.shares tasks
cgroup.procs cpuacct.usage_percpu cpu.rt_period_us cpu.stat
cpu限制
先来一个很占cpu的程序
#include<stdio.h>
int main()
{
while(1)
{
}
return 0;
}
编译运行
[root@localhost ~]# gcc cpu.c -o cpu
[root@localhost ~]# ./cpu
查看cpu占有率
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2485 root 20 0 4212 352 276 R 100.0 0.0 1:10.24 cpu
对程序添加cpu资源限制
[root@localhost ~]# cat /sys/fs/cgroup/cpu/cpu-test/cpu.cfs_quota_us
-1
[root@localhost ~]# echo 20000 > /sys/fs/cgroup/cpu/cpu-test/cpu.cfs_quota_us
[root@localhost ~]# echo 2485 > /sys/fs/cgroup/cpu/cpu-test/tasks
再次查看cpu使用率,已经降到了20%左右。可见cpu限制生效了。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2485 root 20 0 4212 352 276 R 26.7 0.0 8:51.00 cpu