cgroup初步实践
1、查看cgroup 挂载情况
[root@registry cpu]# mount -t cgroup ###或者使用 lssubsys -m 进行查看
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/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
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/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
[root@registry cpu]#
2、cgroupg挂载解决方式)(mount -t cgroup没有结果)
参考下面操作可自行挂载(在生产环境中遇到centos6.8中没有cgroup,在/sys/fs下无法创建文件,只能创建至其他目录 mkdir -p /home/zqj/cgroup)
2.1 centos6.8
mkdir /mnt/cgroups/cpu
mount -t cgroup -o cpu,cpuacct cpu /mnt/cgroups/cpu
mkdir /mnt/cgroups/cpu/daemons
mkdir /mnt/cgroups/cpu/daemons/www
chown root:root /mnt/cgroups/cpu/daemons/www/*
chown root:webmaster /mnt/cgroups/cpu/daemons/www/tasks
echo 1000 > /mnt/cgroups/cpu/daemons/www/cpu.shares
mkdir /mnt/cgroups/cpu/daemons/ftp
chown root:root /mnt/cgroups/cpu/daemons/ftp/*
chown root:ftpmaster /mnt/cgroups/cpu/daemons/ftp/tasks
echo 500 > /mnt/cgroups/cpu/daemons/ftp/cpu.shares
2.2 centos7.0
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/
挂载成功后,ll /sys/fs/cgroup/cpu 就能看见很多东西啦
3、创建测试目录
[root@registry memory]# pwd
/sys/fs/cgroup/memory
[root@registry memory]# mkdir -p test
[root@registry memory]# ls
cgroup.clone_children memory.kmem.slabinfo memory.memsw.limit_in_bytes memory.swappiness
cgroup.event_control memory.kmem.tcp.failcnt memory.memsw.max_usage_in_bytes memory.usage_in_bytes
cgroup.procs memory.kmem.tcp.limit_in_bytes memory.memsw.usage_in_bytes memory.use_hierarchy
cgroup.sane_behavior memory.kmem.tcp.max_usage_in_bytes memory.move_charge_at_immigrate notify_on_release
memory.failcnt memory.kmem.tcp.usage_in_bytes memory.numa_stat release_agent
memory.force_empty memory.kmem.usage_in_bytes memory.oom_control tasks
memory.kmem.failcnt memory.limit_in_bytes memory.pressure_level test
memory.kmem.limit_in_bytes memory.max_usage_in_bytes memory.soft_limit_in_bytes
memory.kmem.max_usage_in_bytes memory.memsw.failcnt memory.stat
[root@registry memory]# cd test/
[root@registry test]# ls
cgroup.clone_children memory.kmem.slabinfo memory.memsw.failcnt memory.soft_limit_in_bytes
cgroup.event_control memory.kmem.tcp.failcnt memory.memsw.limit_in_bytes memory.stat
cgroup.procs memory.kmem.tcp.limit_in_bytes memory.memsw.max_usage_in_bytes memory.swappiness
memory.failcnt memory.kmem.tcp.max_usage_in_bytes memory.memsw.usage_in_bytes memory.usage_in_bytes
memory.force_empty memory.kmem.tcp.usage_in_bytes memory.move_charge_at_immigrate memory.use_hierarchy
memory.kmem.failcnt memory.kmem.usage_in_bytes memory.numa_stat notify_on_release
memory.kmem.limit_in_bytes memory.limit_in_bytes memory.oom_control tasks
memory.kmem.max_usage_in_bytes memory.max_usage_in_bytes memory.pressure_level
[root@registry test]#
4、限制内存使用
# 创建memory cgroup
$ mkdir /sys/fs/cgroup/memory/test
$ echo 64k > /sys/fs/cgroup/memory/test/memory .limit_in_bytes
##内存限制 100M 100*1024*1024
# 把应用的进程的pid加入这个cgroup
$ echo [pid] > /sys/fs/cgroup/memory/test/tasks
需要特别注意的是,生产中需要通过cgroup来限定内存使用率是不可取的,需要程序具备良好的内存回收机制,这是解决问题的根本方法。
5、删除test组
[root@registry ~]# yum install libcgroup libcgroup-tools
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.ustc.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
[root@registry cpu]# cgdelete cpu:/test
[root@registry cpu]# ll
总用量 0
-rw-r--r--. 1 root root 0 9月 30 09:47 cgroup.clone_children
--w--w--w-. 1 root root 0 9月 30 09:47 cgroup.event_control
-rw-r--r--. 1 root root 0 9月 30 09:47 cgroup.procs
-r--r--r--. 1 root root 0 9月 30 09:47 cgroup.sane_behavior
-r--r--r--. 1 root root 0 9月 30 09:47 cpuacct.stat
-rw-r--r--. 1 root root 0 9月 30 09:47 cpuacct.usage
-r--r--r--. 1 root root 0 9月 30 09:47 cpuacct.usage_percpu
-rw-r--r--. 1 root root 0 9月 30 09:47 cpu.cfs_period_us
-rw-r--r--. 1 root root 0 9月 30 09:47 cpu.cfs_quota_us
-rw-r--r--. 1 root root 0 9月 30 09:47 cpu.rt_period_us
-rw-r--r--. 1 root root 0 9月 30 09:47 cpu.rt_runtime_us
-rw-r--r--. 1 root root 0 9月 30 09:47 cpu.shares
-r--r--r--. 1 root root 0 9月 30 09:47 cpu.stat
-rw-r--r--. 1 root root 0 9月 30 09:47 notify_on_release
-rw-r--r--. 1 root root 0 9月 30 09:47 release_agent
-rw-r--r--. 1 root root 0 9月 30 09:52 tasks
[root@registry cpu]#