cgroup基本概念
cgroup是什么
cgroups本质上是对任意进程进行分组化管理的Linux内核模块功能。
cgroup解决的问题
Linux系统每个进程都可以自由竞争系统资源,部分项目中,需要保障一些重要进程的资源开销,如内存,cpu等,需要提前规划好。因此linux引入了cgroups来控制进程资源,让进程更可控。
cgroup功能
Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制。
Prioritization: 优先级控制,比如:CPU利用和磁盘IO吞吐。
Accounting: 一些审计或一些统计,主要目的是为了计费。
Control: 挂起进程,恢复执行进程。
使用 cgroup,系统管理员可更具体地控制对系统资源的分配、优先顺序、拒绝、管理和监控。可更好地根据任务和用户分配硬件资源,提高总体效率。
cgroup适用的场景
资源预分配,保证重要进程的资源
1、隔离一个进程集合(比如:nginx的所有进程),并限制他们所消费的资源,比如绑定CPU的核。
2、为这组进程分配其足够使用的内存,保障资源
3、为这组进程分配相应的网络带宽和磁盘存储限制
4、限制访问某些设备(通过设置设备的白名单)
cgroup能操控的资源
cgroup结构
从上到下,分别是hiereachy下有很多cgroup节点,cgroup节点有自己的属性,属性为task和对应的资源组,资源组就是subsystem
cgroup支持的subsystem
目前Linux支持下面12种subsystem
1、cpu :用来限制cgroup的CPU使用率。
2、cpuacct :统计cgroup的CPU的使用率。
3、cpuset:绑定cgroup到指定CPUs和NUMA节点。
4、memory:统计和限制cgroup的内存的使用率,包括process memory, kernel memory, 和swap。
5、devices:限制cgroup创建(mknod)和访问设备的权限。
6、freezer:suspend和restore一个cgroup中的所有进程。
7、net_cls :将一个cgroup中进程创建的所有网络包加上一个classid标记,用于tc和iptables。 只对发出去的网络包生效,对 收到的网络包不起作用。
8、blkio:限制cgroup访问块设备的IO速度。
9、perf_event :对cgroup进行性能监控
10、net_prio:针对每个网络接口设置cgroup的访问优先级。
11、hugetlb :限制cgroup的huge pages的使用量。
12、pids:限制一个cgroup及其子孙cgroup中的总进程数。
可以通过下面的命令查看:
cat /proc/cgroups,结果如下
不同subsystem的工作方式可能差别较大,有些需要做资源统计,有些需要做资源控制,有些即不统计也不控制,有些subsystem严重依赖继承关系,有些subsystem完全用不到继承关系,而有些对继承关系没有严格要求,对系统性能的影响也不一样,在使用中,根据场景需求,再分析具体要做些什么
对应的资源开关在内核编译配置文件中:
cgroup基本操作
cgroup文件系统挂载
cgroup相关的所有操作都是基于内核中的cgroup virtual filesystem,使用cgroup很简单,挂载这个文件系统就可以了。一般情况下都是挂载到/sys/fs/cgroup目录下,当然挂载到其它任何目录都没关系。
挂载 cgroup文件系统操作如下:
1、先创建一个空目录,如下,在home目录下创建cgroup子目录
2、执行挂载命令
centos 7 已经默认挂载在/sys/fs/cgroup中了
cgroup内容查看
cgroup下面是具体的分组,每个分组的具体内容,进去里面看就可以了
查看进程的cgroup
参考:https://segmentfault.com/a/1190000006917884?utm_source=sf-similar-article
cgroup实例