前言
在一个docker宿主机上可以启动多个容器,默认情况下,docker并没有限制其中运行的容器使用硬件资源。
但如果在实际环境中,容器的负载过高,会占用宿主机大量的资源。这里的资源主要指的CPU,内存,和IO带宽这三个方面。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
什么是CGroup?
Cgroup(Control Group)是Linux内核提供的一种机制,用于对进程组(process group)进行资源分配和限制。它可以对进程组设置资源限制,例如CPU、内存、磁盘IO、网络带宽等,以帮助管理和控制系统中运行的进程和容器。
Cgroup通过将进程组组织为一个层次结构,并为每个层级分配资源,实现对资源的限制和隔离。
在Cgroup层次结构中,每个Cgroup都可以包含其他子Cgroup,并且可以为每个Cgroup设置特定的资源限制。这样可以为不同的应用程序、进程或容器分配适当的资源,并确保它们不会互相干扰。
使用场景和优势:
Cgroup(Control Group)是Linux内核提供的功能强大的机制,用于资源管理和控制,具有以下主要功能:
- 资源限制和配额:Cgroup可以为进程组(process group)设置资源限制和配额。这包括CPU使用量、内存使用量、磁盘IO、网络带宽等资源。通过设置适当的限制,可以确保每个Cgroup内的进程不会过度消耗系统资源。
- 资源统计和监控:Cgroup可以统计和监控进程组的资源使用情况。这包括CPU使用率、内存使用量、磁盘IO操作等。通过实时监控Cgroup的资源消耗,可以了解系统中各个进程组的状态,并进行性能分析和优化。
- 资源隔离和控制:Cgroup可以实现资源的隔离和控制,确保各个进程组之间不会互相干扰。通过将进程组划分为不同的Cgroup,并为每个Cgroup设置适当的资源限制,可以实现资源的隔离和分配。
- 进程管理:Cgroup提供了一种管理进程的方式。可以将进程添加到或从Cgroup中移除,以及查看和管理Cgroup中的进程列表。这对于组织和管理具有特定资源需求的进程非常有用,例如容器化环境。
- Cgroup层次结构:Cgroup支持创建一个层次结构来组织进程组和资源。Cgroup可以包含其他的子Cgroup,并继承父级Cgroup的资源限制。这样可以实现更灵活和层次化的资源管理。
- 容器化支持:Cgroup是容器技术的基础之一。容器平台(如Docker、Kubernetes等)使用Cgroup来隔离和管理容器的资源使用。通过Cgroup,容器可以被限制在一定的资源范围内,从而实现隔离和控制。
查看系统是否启用CGroup
G_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=y
[root@mufeng41 ~]#
可以看到CGroup=Y 说名已经启动了linux CGroup
限制CPU使用率
- 写一段死循环
[root@mufeng41 ~]# vim hello.c
[root@mufeng41 ~]# cat hello.c
int main(void)
{
int i = 0;
for(;;) i++;
return 0
}
执行:
[root@mufeng41 ~]# gcc -o hello hello.c
[root@mufeng41 ~]# ./hello
[root@mufeng41 ~]# cd /sys/fs/cgroup/cpu
[root@mufeng41 cpu]# mkdir hello
[root@mufeng41 cpu]# cd hello/
[root@mufeng41 hello]# ls
cgroup.clone_children cpuacct.usage cpu.rt_period_us notify_on_release
cgroup.event_control cpuacct.usage_percpu cpu.rt_runtime_us tasks
cgroup.procs cpu.cfs_period_us cpu.shares
cpuacct.stat cpu.cfs_quota_us cpu.stat
[root@mufeng41 hello]# cat cpu.cfs_quota_us
-1
[root@mufeng41 hello]# echo 20000 > cpu.cfs_quota_us
[root@mufeng41 hello]# echo 84783 > tasks
[root@mufeng41 hello]# top
发现CPU的使用率已经降到了20%
如果在重启一个hello应用,并按照上面进行操作,会发现两个应用各占10%
总结
以上就是关于cgoup的全部内容,你学会了吗,我是沐风晓月,我在csdn等你。