本文共 4665 字,大约阅读时间需要 15 分钟。
操作系统:centos7
安装cgroup
[root@localhost ~]# yum install -y libcgroup-tools.x86_64Loaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.ustc.edu.cn * extras: mirrors.cqu.edu.cn * updates: mirrors.cqu.edu.cnResolving Dependencies--> Running transaction check---> Package libcgroup-tools.x86_64 0:0.41-21.el7 will be installed--> Finished Dependency ResolutionDependencies Resolved================================================================================================================ Package Arch Version Repository Size================================================================================================================Installing: libcgroup-tools x86_64 0.41-21.el7 base 99 kTransaction Summary================================================================================================================Install 1 PackageTotal download size: 99 kInstalled size: 257 kDownloading packages:libcgroup-tools-0.41-21.el7.x86_64.rpm | 99 kB 00:00:00 Running transaction checkRunning transaction testTransaction test succeededRunning 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 cgroupcgroup 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_releasecgroup.event_control cpuacct.usage cpu.cfs_quota_us cpu.shares taskscgroup.procs cpuacct.usage_percpu cpu.rt_period_us cpu.stat
先来一个很占cpu的程序
#includeint 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
转载地址:http://yecmb.baihongyu.com/