一、理解Cgroups
-
什么是Cgroups?
cgroups - 内核控制组- 一个内核特性,允许对任务(进程)进行聚合或划分
- 任务被组织成层次化的组
- cgroups 可以被配置以表现出特定的行为
- 用于帮助调整系统,以最佳方式利用可用的硬件和网络资源
它(指systemd)解决了某些服务(如Apache)产生大量第三方进程(例如CGI或Java进程)的问题,而这些第三方进程又会继续产生更多的进程。这使得明确分配变得困难甚至不可能。此外,服务可能无法正确终止,导致一些子进程仍然存活。
systemd通过为每个服务分配一个自己的cgroup来解决这个问题。cgroups是内核的一个特性,允许将进程及其所有子进程聚合成层次化组织的组。systemd以服务的名称来命名每个cgroup。由于非特权进程不允许离开其cgroup,这为使用服务名称标记服务产生的所有进程提供了一种有效的方法。
要列出属于某个服务的所有进程,可以使用命令systemd-cgls。 -
cgroups术语
- cgroup:将一组任务与一个或多个子系统的参数集相关联
- subsystem:一个模块,它利用cgroup提供的任务分组功能,以特定方式处理任务组
- hierarchy:以树形结构排列的一组cgroup
- task:系统上运行的进程
二、理解cgroup模型
-
linux进程模型
- 在Linux系统中使用systemd的所有进程都共有一个父进程:systemd进程。
- Linux进程模型是单层次的——所有进程都源自一个单一的父进程。
- Linux进程会继承其父进程的环境以及某些其他属性。
在Linux系统中,所有进程都源自一个共同的父进程:systemd进程。该进程在系统启动时由内核执行,并启动其他进程(这些进程又可能启动它们自己的子进程)。所有进程都源自单一的父进程,这使得Linux进程模型成为一个单层次结构。
除了systemd之外,每个Linux进程都会继承其父进程的环境(如PATH变量)以及某些其他属性(如打开的文件描述符)。 -
cgroup模型
-
cgroups(控制组)与进程相似之处在于:
- 它们具有层次结构
- 子cgroups会从其父cgroup继承某些属性。
-
它们之间的根本区别在于:
-