systemd中的slice服务单元

发布时间 2023-10-31 10:44:19作者: 武平宁

使用场景

对一组服务进行管理,比如限制资源使用、调整启动顺序和依赖关系。

比如,好几个服务都需要限制内存使用,可以每个服务都加个MemoryLimit=373741824,也可以将这些服务加入到同一个slice,然后,只需要在slice中配置MemoryLimit=373741824

介绍

systemd的slice是一种服务单元,用于将多个相关进程集中管理。这些进程可以是服务单元(service unit)或范围单元(scope unit)。slice并不直接包含进程,而是组建一个层级,并将scope和service放置其中。

systemd管理的切片,形象地讲,都是cgroup下的树状节点。Linux中有4种初始的slice,如root slice(-.slice),system.slice(通常管理的是服务单元以及范围单元),machine.slice(虚拟机和容器都属于本切片),user.slice(用户的登录session则属于本切片,包括所有跟用户有关的进程)。

通过slice,可以针对其管理的进程组添加诸如CPU、内存等系统资源的限制。这样,系统管理员可以更灵活地管理、配置和控制系统资源,确保关键服务得到优先支持,并防止个别服务占用过多资源导致系统崩溃或性能下降。

查看

  • 查看systemd的服务单元有哪些类型
% systemctl --type help 
Available unit types:
service
mount
swap
socket
target
device
automount
timer
path
slice
scope
  • 查看本机的slice服务单元
% systemctl --type slice
  UNIT                         LOAD   ACTIVE SUB    DESCRIPTION                        
  -.slice                      loaded active active Root Slice                         
  machine.slice                loaded active active Virtual Machine and Container Slice
  system-getty.slice           loaded active active system-getty.slice                 
  system-modprobe.slice        loaded active active system-modprobe.slice              
  system-systemd\x2dfsck.slice loaded active active system-systemd\x2dfsck.slice       
  system.slice                 loaded active active System Slice                       
  user-1000.slice              loaded active active User Slice of UID 1000             
  user.slice                   loaded active active User and Session Slice             

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

8 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

可以看到有8个,主要是-.slicemachine.slicesystem.sliceuser.slice
其他4个的解释如下:

system-getty.slice:这个slice用于管理系统的终端登录进程。getty是一个用于管理终端登录的程序,当用户在终端输入用户名和密码时,getty会启动一个登录会话。system-getty.slice就是用来管理这些getty进程的,确保它们能够正常运行,以便用户能够正常登录系统。

system-modprobe.slice:这个slice负责管理内核模块的加载进程。modprobe是一个用于加载和管理内核模块的程序,当系统需要加载或卸载某个内核模块时,modprobe会负责处理。system-modprobe.slice确保modprobe进程能够正常执行,以支持系统的正常运行。

system-systemd\x2dfsck.slice:这个slice用于管理文件系统的一致性检查进程。fsck是一个用于检查和修复文件系统的工具,当系统启动或文件系统挂载时,如果检测到文件系统存在问题,fsck会被调用进行修复。system-systemd\x2dfsck.slice负责管理系统中的fsck进程,确保文件系统的一致性检查能够正常执行,以维护文件系统的完整性和稳定性。

user-1000.slice的作用是管理系统中的一个特定用户的进程。在这个例子中,它管理的是用户ID为1000的用户的进程。通过user-1000.slice,可以对该用户进程组进行资源限制、优先级调整等操作,以确保系统资源的合理分配和用户的正常使用。