前言

在一个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

容器管理中关于CGroup的那些事-LMLPHP

[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 

容器管理中关于CGroup的那些事-LMLPHP
发现CPU的使用率已经降到了20%

如果在重启一个hello应用,并按照上面进行操作,会发现两个应用各占10%

总结

以上就是关于cgoup的全部内容,你学会了吗,我是沐风晓月,我在csdn等你。

06-26 15:28