什么是cgroup:
Cgroups 是 control groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组
(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。最初由 google 的
工程师提出,后来被整合进 Linux 内核。Cgroups 也是 LXC 为实现虚拟化所使用的资源管理手段,
可以说没有cgroups就没有LXC。
cgroup可以干什么:
1.限制进程组可以使用的资源数量,限制进程最大使用的内存等
2.进程组的优先级控制,比如为某个进程组分配特定的cpu share
3.记录进程组使用的资源数量,比如记录某个进程CPU的使用时间
4.进程组隔离,比如通过namespace以达到隔离的目的
5.进程组控制,比如可以将进程组挂起或恢复
在Cgroup可以说理解了这四个概念,那么对于如何使用cgroup,将会是如鱼得水。
Subsystems: 称之为子系统,一个子系统就是一个资源控制器,比如 cpu子系统就是控制
cpu时间分配的一个控制器。
Hierarchies: 可以称之为层次体系也可以称之为继承体系,指的是Control Groups是
按照层次体系的关系进行组织的。
Control Groups: 一组按照某种标准划分的进程。进程可以从一个Control Groups迁移
到另外一个Control Groups中,同时Control Groups中的进程也会受到这个组的资源限制。
Tasks: 在cgroups中,Tasks就是系统的一个进程。
在Red_Hat_Enterprise_Linux-6系列的linux中,默认提供了如下子系统。
blkio这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等) 。
cpu这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。
cpuacct这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。
cpuset这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。
devices这个子系统可允许或者拒绝 cgroup 中的任务访问设备。
freezer这个子系统挂起或者恢复 cgroup 中的任务。
memory这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。
net_cls这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序
(tc)识别从具体 cgroup 中生成的数据包。
ns名称空间子系统。
cgroup ##(此例是在redhat6.5中做测试)
cgroups 实现了对资源的配额和度量.(此例中凡是需要/etc/init.d/cgconfig restart 均需跳出cgroup目录进行操作,否则会重启失败)
[root@server1 ~]# yum search cgroup 寻找软件包
Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
LoadBalancer | 3.9 kB 00:00
rhel-source | 3.9 kB 00:00
salt | 2.9 kB 00:00
=================================== N/S Matched: cgroup ====================================
libcgroup.i686 : Tools and libraries to control and monitor control groups
libcgroup.x86_64 : Tools and libraries to control and monitor control groups
libcgroup-devel.i686 : Development libraries to develop applications that utilize control
: groups
libcgroup-devel.x86_64 : Development libraries to develop applications that utilize control
: groups
Name and summary matches only, use "search all" for everything.
[root@server1 ~]# yum install libcgroup.x86_64 -y 安装软件包
安装好libcgroup之后,会在根下产生/cgroup,此时该目录下还没有任何东西
/etc/init.d/cgconfig start 打开cgroup(注意不能在当前目录下)
[root@server1 ~]# cd /cgroup/
[root@server1 cgroup]# ls
[root@server1 cgroup]# pwd
/cgroup
[root@server1 cgroup]# /etc/init.d/cgconfig start 开启cgconfig服务
Starting cgconfig service: [ OK ]
[root@server1 cgroup]# cd /cgroup/
[root@server1 cgroup]# ls
blkio cpu cpuacct cpuset devices freezer memory net_cls
[root@server1 cgroup]# ll
total 0
drwxr-xr-x 2 root root 0 Aug 21 15:39 blkio
drwxr-xr-x 2 root root 0 Aug 21 15:39 cpu
drwxr-xr-x 2 root root 0 Aug 21 15:39 cpuacct
drwxr-xr-x 2 root root 0 Aug 21 15:39 cpuset
drwxr-xr-x 2 root root 0 Aug 21 15:39 devices
drwxr-xr-x 2 root root 0 Aug 21 15:39 freezer
drwxr-xr-x 2 root root 0 Aug 21 15:39 memory
drwxr-xr-x 2 root root 0 Aug 21 15:39 net_cls
[root@server1 cgroup]# pwd
/cgroup
[root@server1 cgroup]# cd memory/
[root@server1 memory]# ls
cgroup.event_control memory.memsw.limit_in_bytes memory.swappiness
cgroup.procs memory.memsw.max_usage_in_bytes memory.usage_in_bytes
memory.failcnt memory.memsw.usage_in_bytes memory.use_hierarchy
memory.force_empty memory.move_charge_at_immigrate notify_on_release
memory.limit_in_bytes memory.oom_control release_agent
memory.max_usage_in_bytes memory.soft_limit_in_bytes tasks
memory.memsw.failcnt memory.stat
[root@server1 memory]# cat memory.limit_in_bytes
9223372036854775807
[root@server1 memory]# free -m 查看空闲内存大小
total used free shared buffers cached
Mem: 490 332 157 0 32 165
-/+ buffers/cache: 134 355
Swap: 991 0 991
[root@server1 memory]# df 查看挂载
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 19134332 1204464 16957888 7% /
tmpfs 251124 36 251088 1% /dev/shm
/dev/vda1 495844 33478 436766 8% /boot
tmpfs临时文件系统:
tmpfs,临时文件系统,是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,
和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储,而且传统的ramdisk是个块设备,
要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以
使用了。tmpfs是最好的基于RAM的文件系统。
[root@server1 memory]# cat /etc/fstab 查看默认挂载可以看到临时文件系统
#
# /etc/fstab
# Created by anaconda on Fri Jul 27 11:46:21 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=2f7fafc6-5946-4115-b837-692b2d7b4c31 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@server1 me