工控智汇

工控智汇

关于Linux中控制群组cgroup(资源管理)的一些笔记

admin 183 45
写在前面

学习遇到容器资源限制的处理问题,所以研究下。

本文内容涉及:

容器中cgroup的应用

控制群组部分属节译,介意小伙伴请看原文。Redhat官网原文链接:

后面部分是关于systemctl命令的总结

不加思考地滥读或无休止地读书,所读过的东西无法刻骨铭心,其大部分终将消失殆尽。——叔本华

容器使用cgroup对资源进行限制容器内存限制:-m200M
┌──[root@]-[/]└─$dockerrun-itd--name=c2-m200Mcentos3b2df1738e84159f4fa02dadbfc285f6da8ddde4d94cb449bc775c9a70eaa4ea┌──[root@]-[/]└─$dockerstatsCONTAINERIDNAMECPU%MEMUSAGE/LIMITMEM%NETI/OBLOCKI/%528KiB/200%648B/0B0B/0%8.684MiB/3.843%648B/0/11.5MB2
对容器CPU的限制:-cpuset-cpus0
┌──[root@]-[/]└─$psmopid,psr$(pgrepcat)┌──[root@]-[/]└─$dockerrun-itd--name=c3--cpuset-cpus0-m200Mcentosa771eed8c7c39cd410bd6f43909a67bfcf181d87fcafffe57001f17f3fdff408
第1章控制群组简介1.1.什么是控制群组

控制群组(controlgroup)是Linuxkernel(Linux内核)的一项功能:

在一个系统中运行的层级制进程组,您可对其进行资源分配(如CPU时间、系统内存、网络带宽或者这些资源的组合)。

通过使用cgroup,系统管理员在分配、排序、拒绝、管理和监控系统资源等方面,可以进行精细化控制。硬件资源可以在应用程序和用户间智能分配,从而增加整体效率。

控制群组可对进程进行层级式分组并标记,并对其可用资源进行限制。

传统情况下,所有的进程分得的系统资源数量相近,管理员用进程niceness值进行调节。

通过将cgroup层级系统与systemd单位树捆绑,Linux可以把资源管理设置从进程级别移至应用程序级别。

可以使用systemctl指令,或者通过修改systemd单位文件来管理系统资源。

上述工具提供了高阶接口,用与Linuxkernel中的cgroup管控器(也称为子系统)互动。用于资源管理的主要cgroup管控器是cpu,memory和blkio

1.2.cgroup的默认层级

默认情况下,systemd会自动创建slice,scope和service单位的层级,来为cgroup树提供统一结构。使用systemctl指令,您可以通过创建自定义slice进一步修改此结构,systemd也自动为/sys/fs/cgroup/目录中重要的kernel资源管控器挂载层级。

在系统的开机阶段,systemd会把支持的controllers(subsystem子系统)挂载到默认的/sys/fs/cgroup/目录下面:

┌──[root@]-[~]└─$ls/sys/fs/cgroup/blkiocpuacctcpusetfreezermemorynet_cls,net_prioperf_eventsystemdcpucpu,cpuacctdeviceshugetlbnet_clsnet_priopids┌──[root@]-[~]└─$ll/sys/fs/cgroup/total0drwxr-xr-x5rootroot0Oct1301:53blkiolrwxrwxrwx1rootroot11Oct1301:53cpu-cpu,cpuacctlrwxrwxrwx1rootroot11Oct1301:53cpuacct-cpu,cpuacctdrwxr-xr-x5rootroot0Oct1301:53cpu,cpuacctdrwxr-xr-x2rootroot0Oct1301:53cpusetdrwxr-xr-x5rootroot0Oct1301:53devicesdrwxr-xr-x2rootroot0Oct1301:53freezerdrwxr-xr-x2rootroot0Oct1301:53hugetlbdrwxr-xr-x5rootroot0Oct1301:53memorylrwxrwxrwx1rootroot16Oct1301:53net_cls-net_cls,net_priodrwxr-xr-x2rootroot0Oct1301:53net_cls,net_priolrwxrwxrwx1rootroot16Oct1301:53net_prio-net_cls,net_priodrwxr-xr-x2rootroot0Oct1301:53perf_eventdrwxr-xr-x2rootroot0Oct1301:53pidsdrwxr-xr-x5rootroot0Oct1301:53systemd┌──[root@]-[~]└─$

除了systemd目录外,其它目录都是对应的subsystem。/sys/fs/cgroup/systemd目录是systemd维护的自己使用的非subsystem的cgroups层级结构。

systemd的单位类型

系统中运行的所有进程,都是systemdinit进程的子进程。在资源管控方面,systemd提供了三种单位类型:

service

service:一个或一组进程,由systemd依据单位配置文件启动。service对指定进程进行封装,这样进程可以作为一个整体被启动或终止。service参照以下方式命名:

其中,name代表scope名称。Undefined
slice

slice:一组按层级排列的单位。slice并不包含进程,但会组建一个层级,并将scope和service都放置其中。真正的进程包含在scope或service中。在这一被划分层级的树中,每一个slice单位的名字对应通向层级中一个位置的路径。小横线("-")起分离路径组件的作用。例如,如果一个slice的名字是:

-.sliceUndefined

service、scope和slice单位直接映射到cgroup树中的对象。当这些单位被激活,它们会直接一一映射到由单位名建立的cgroup路径中。例如,属于,会直接映射到///中。

service、scope和slice是由系统管理员手动创建或者由程序动态创建的。默认情况下,操作系统会定义一些运行系统必要的内置service。另外,默认情况下,系统会创建四种slice:

slice:

描述

-.slice

根slice;

所有系统service的默认位置;

所有用户会话的默认位置;

所有虚拟机和Linux容器的默认位置。

请注意,所有的用户会话、虚拟机和容器进程会被自动放置在一个单独的scope单元中。而且,所有的用户会分得一个隐含子slice(implicitsubslice)。除了上述的默认配置,系统管理员可能会定义新的slice,并将service和scope置于其中。

├─1/usr/lib/systemd/systemd--switched-root--system--deserialize21├─docker│├─3254bcd54a7b2b1a5ece2ca873ab18c3215484e6b4f83617a522afe4e853c378││├─11885/home/weave/runsvinit││├─11902/sbin/runsvdir/etc/service││├─11903runsvprobe││├─11904runsvapp││├─11907=true││└─11908=true│├─b867272463dffc7a2f698848a622e33ed59a2176da89b99038e451eaf181bc57││└─11484/usr/bin/cadvisor-logtostderr│├─a771eed8c7c39cd410bd6f43909a67bfcf181d87fcafffe57001f17f3fdff408││├─11310/bin/bash││└─11361bash│├─3b2df1738e84159f4fa02dadbfc285f6da8ddde4d94cb449bc775c9a70eaa4ea││└─11086/bin/bash│└─55e45b34d93d0a36a06283c90e7da9097ad3d85d26dfbdc9d07d2e45aeced8f1│└─10677/bin/bash├─│└─│├─││├─26654sshd:root@pts/2││├─26656-bash││└─26925systemd-cgls│├─││├─25790sshd:root@pts/1││└─25792-bash│└─│├─24025sshd:root@pts/0│└─24027-bash└─├─│├─10151/usr/bin/dockerd-Hfd://--containerd=/run/containerd/containerd│├─11445/usr/bin/│└─11452/usr/bin/docker-proxy-prototcp-host-ip::-host-port8080-con├─│├─1027/usr/libexec/postfix/master-w│├─1043qmgr-l-tunix-u│└─26337pickup-l-tunix-u├─│└─943/usr/bin/python-Es/usr/sbin/tuned-l-P├─│└─942/usr/sbin/sshd-D├─│├─946/usr/bin/containerd│├─10656/usr/bin/containerd-shim-runc-v2-namespacemoby-id55e45b34d93d│├─11066/usr/bin/containerd-shim-runc-v2-namespacemoby-id3b2df1738e84│├─11288/usr/bin/containerd-shim-runc-v2-namespacemoby-ida771eed8c7c3│├─11465/usr/bin/containerd-shim-runc-v2-namespacemoby-idb867272463df│└─11865/usr/bin/containerd-shim-runc-v2-namespacemoby-id3254bcd54a7b├─│└─605/usr/sbin/crond-n├─│└─600/usr/sbin/rsyslogd-n├─│└─590/bin/dbus-daemon--system--address=systemd:--nofork--nopidfile-├─│└─589/usr/sbin/irqbalance--foreground├─│└─586/usr/lib/polkit-1/polkitd--no-debug├─│└─583/usr/bin/vmtoolsd├─│└─582/usr/bin/VGAuthService-s├─│└─594/usr/sbin/chronyd├─│└─542/usr/lib/systemd/systemd-logind├─│└─495/sbin/auditd├─│└─463/usr/lib/systemd/systemd-udevd├─│└─getty@│└─612/sbin/agetty--nocleartty1linux└─└─438/usr/lib/systemd/systemd-journald

service和scope包含进程,但被放置在不包含它们自身进程的slice里。唯一例外是位于特殊中的PID1。请注意,-.slice未被显示,因为它被整体树的根隐性识别。

service和slice单位可通过永久单位文件来配置;或者对PID1进行API调用,在运行时动态创建。scope单位只能以第一种方式创建。API调用动态创建的单位是临时的,并且仅在运行时存在。一旦结束、被关闭或者系统重启,临时单位会被自动释放。

1.3.LinuxKernel的资源管控器

资源管控器(也称为cgroup子系统)代表一种单一资源:如CPU时间或者内存。Linuxkernel提供一系列资源管控器,由systemd自动挂载。如需参考目前已挂载的资源管控器列表,请参见/proc/cgroups,或使用lssubsys监控工具。在Linux7中,systemd默认挂载以下管控器:

Linux7中可用的管控器

管控器

dest

blkio

对输入∕输出访问存取块设备设定权限;

cpu

使用CPU调度程序让cgroup的任务可以存取CPU。它与cpuacct管控器一起挂载在同一mount上;

cpuacct

自动生成cgroup中任务占用CPU资源的报告。它与cpu管控器一起挂载在同一mount上;

cpuset

给cgroup中的任务分配独立CPU(在多芯系统中)和内存节点;

devices

允许或禁止cgroup中的任务存取设备;

freezer

暂停或恢复cgroup中的任务;

memory

对cgroup中的任务可用内存做出限制,并且自动生成任务占用内存资源报告;

net_cls

使用等级识别符(classid)标记网络数据包,这让Linux流量控制器(tc指令)可以识别来自特定cgroup任务的数据包;

perf_event

允许使用perf工具来监控cgroup;

hugetlb

允许使用大篇幅的虚拟内存页,并且给这些内存页强制设定可用资源量。

LinuxKernel展示了一系列可用systemd配置的资源管控器可调参数。参数的详细描述请参阅kernel文档(kernel管控器专项介绍的参考列表)。

第2章使用控制群组

概述与创建、管理控制群组相关的任务。systemd是管理cgroup的推荐方式并会在将来版本中被支持,

2.1.创建控制群组

从systemd的角度来看,cgroup会连接到一个系统单位,此单位可用单位文件进行配置、用systemd命令列实用工具进行管理。根据应用的类型,您的资源管理设定可以是transient(临时的)或者persistent(永久的)。

要为服务创建transientcgroup(临时cgroup),请使用systemd-run指令启动此服务。如此,可以限制此服务在运行时所用资源。对systemd进行API调用,应用程序可以动态创建临时cgroup。服务一旦停止,临时单位就会被自动移除。

要给服务分配persistentcgroup(永久cgroup),请对其单位配置文件进行编写。系统重启后,此项配置会被保留,所以它可以用于管理自动启动的服务。请注意,scope单位不能以此方式创建。

2.1.1.用systemd-run创建临时cgroup

systemd-run指令用于创建、启动临时service或scope单位,并在此单位中运行自定义指令。在service单位中执行的指令在后台非同步启动,它们从systemd进程中被调用。在scope单位中运行的指令直接从systemd-run进程中启动,因此从调用方继承执行状态。此情况下的执行是同步的。

在一个指定cgroup中运行指令,请以root身份输入

systemd-run--unit=name--scope--slice=slice_namecommandUndefined

name代表您想要此单位被识别的名称。如果--unit没有被指定,单位名称会自动生成。建议选择一个描述性的名字,因为它将代表systemctl输出中的单位。在单位运行时期间,此名字需为独一无二的。

使用可选的--scope参数创建临时scope单位来替代默认创建的service单位。

--slice选项,让您新近创建的service或scope单位可以成为指定slice的一部分。用现存slice(如systemctl-tslice输出所示)的名字替代slice_name,或者通过传送一个独有名字来创建新slice。默认情况下,service和scope做为的一部分被创建。

用您希望在service单位中运行的指令替代command。将此指令放置于systemd-run句法的最末端。这样,此指令的参数就不会与systemd-run参数混淆。

用systemd-run来启动新service
┌──[root@]-[~]└─$systemd-run--unit=toptest--slice=代表您希望禁用的service名字。Undefined
2.3.修改cgroup

所有被systemd监管的永久单位都在/usr/lib/systemd/system/目录中有一个单位配置文件。如要修改service单位的参数,请修改此配置文件。可以手动完成或者从命令列界面使用systemctlset-property指令。

如需使用命令列来限定的CPU和内存占用量,请输入:=600MemoryLimit=500MWewantsystemdtogivehttpdsometimetofinishgracefully,,=SIGCONTPrivateTmp=true[Install]WantedBy=┌──[root@]-[~]└─$=true┌──[root@]-[~]└─$=600MemoryLimit=500M┌──[root@]-[~]└─$cat/etc/systemd/system//50-[Service]CPUShares=600┌──[root@]-[~]└─$cat/etc/systemd/system//50-[Service]MemoryLimit=524288000┌──[root@]-[~]└─$cat/etc/systemd/system//50-[Service]BlockIOAccounting=yes┌──[root@]-[~]└─$
2.3.2.修改单位文件

systemdservice单位文件提供一系列对资源管理有帮助的高级配置参数。这些参数与必须在kernel中启用的Linuxcgroup管控器通讯。您可以使用这些参数管理CPU、内存使用量、blockIO和更多精细单位的属性。

管理CPU

cpu管控器在kernel中被默认启动,这可使所有系统service的可用CPU量相同,而与其所包含进程数量无关。此项默认设定可以使用/etc/systemd/配置文件中的DefaultControllers参数来修改。如需管理CPU的分配,请使用单位配置文件[Service]部分中的下列指令:

`CPUShares=value`

请用CPUshare的数量代替value。默认值为1024,您可以增加此数值来给单位分配更多CPU。此参数默认:CPUAccounting已在单位文件中启用。
CPUShares参数可以控制控制群组参数。

┌──[root@]-[~]└─$cat/etc/systemd/|grep-iBlockIOAccountingDefaultCPUAccounting=no
限定一个单位的CPU可用量
要应用此项修改,请重新载入systemd的配置并重启Apache来让修改过的service文件生效:
内存管理

为限定单位可用内存大小,请使用单位配置文件[Service]部分中的下列指令:

MemoryLimit=value

对cgroup中执行的进程设定其可用内存的最大值,并用此值替代value。请以千字节(Kilobyte)、兆字节(Megabyte)、千兆字节(Gigabyte)、太字节(Terabyte)为计量单位并使用K、M、G、T后缀来表示。同样,MemoryAccounting参数必须在同一单元中启用。
MemoryLimit参数可以控制_in_bytes控制群组参数。

限制一个单位的可用内存量
要应用此项修改,请重新载入systemd的配置并重启Apache来让修改过的service文件生效:
管理BlockIO

如要管理BlockIO,请使用单位配置文件[Service]部分中的下列指令。下列指令假设BlockIOAccounting参数已启动:

BlockIOWeight=value

为已执行进程选取一个新的整体blockIO权重,并以此替代value。权重需在10到1000之间选择,默认值是1000。

BlockIODeviceWeight=device_namevalue

请为device_name所指的设备选取blockIO权重,并以此代替value。用名称或者通向此设备的路径来代替device_name。因为有BlockIOWeight,您可以在10到1000之间选取权重值。

BlockIOReadBandwidth=device_namevalue

此指令可以为一个单位限定具体带宽。用设备名称或通向块设备节点的路径替换device_name,value代表带宽率。使用K、M、G、T后缀作为计量单位。没有后缀的值默认单位为“字节/秒”。

BlockIOWriteBandwidth=device_namevalue

此指令可以给指定设备限定可写带宽。参数与可与BlockIOReadBandwidth一致。

限定一个单位BlockIO的可用量
如要设定Apache从/var/log/目录读取的最大带宽为5MB/秒,请使用下列句法:[Service]BlockIOReadBandwith=/var/log5M此选项可以控制存取指定设备节点的次数。此处,device_name代表通向设备节点的路径,以便单位读取、写入或者创建设备节点。DevicePolicy=value-strict:仅允许DeviceAllow指定的存取类型;-auto:如果不显示DeviceAllow,则允许对所有设备进行存取,此设定为默认设置。Slice=slice_name此选项可以设定Linuxcgroup管控器公开的多项控制群组参数。用您希望修改的低级别cgroup参数来替换attribute,用此参数的新值来替换value。
更改低级别cgroup的属性
要应用此项修改,请重新载入systemd的配置并重启Apache来让修改过的service文件生效:
2.4.获得关于控制群组的信息

使用systemctl指令将系统单位列表并检查它们的状态。systemd-cgls指令可以检查控制群组的层级,systemd-cgtop可以监控控制群组的实时资源消耗。

2.4.1.将单位列表

使用下列指令将系统中所有被激活单位列表:

┌──[root@]-[~]└─$systemctllist-unitsUNITLOADACTIVESUBDESCRIPTIONproc-sys-fs-binfmt_ystemAusys-devices-pci0000:00-0000:00:10.0-host2-target2:0:0-2:0:0:0-

以上所列结果包含四项:

UNIT

单位名称,也反映单位在cgroup树中的位置。有三种单位类型与资源控制相关:slice、scope和service。

LOAD

显示单位配置文件是否被正确装载。如果装载失败,文件会包含error而不是loaded。其它单位装载状态有:stub、merged和masked。

ACTIVE

高级单位的激活状态,是SUB的一般化。

SUB

低级单位的激活状态。可能值的范围取决于单位类型。

DESCRIPTION

描述单位内容和性能。

默认情况下,systemctl只会列出被激活的单位(依据ACTIVE域中的高级激活状态)。使用--all选项可以查看未被激活的单位。如要限制结果列表中的信息量,请使用--type(-t)参数,此参数需要单位类型的逗号分隔列表,如:service和slice或者单位装载状态,如:loaded和masked。

使用systemctllist-units
┌──[root@]-[~]└─$\x2dpolicy\x2dmigrate\x2dlocal\\x2dpolicy\x2dmigrate\==Thehigh-levelunitactivationstate,=Thelow-levelunitactivationstate,,'systemctllist-unit-files'.┌──[root@]-[~]└─$systemctl-tservice,maskedUnknownunittypeorloadstate'masked'.Use-thelptoseealistofallowedvalues.┌──[root@]-[~]└─$,'systemctllist-unit-files'.┌──[root@]-[~]└─$systemctllist-unit-filesUNITFILESTATEproc-sys-fs-binfmt__

2.4.2.查看控制群组的层级

上述指令不会超越单位水平来显示cgroup中运行的真正进程。systemctl结果也不会显示单位的层级。您可以使用systemd-cgls指令,根据cgroup将运行的进程分组来同时实现两者。要显示您系统中的全部cgroup层级,请输入:

systemd-cglsPID代表您希望查看的进程ID。catproc/PID/cgroup┌──[root@]-[~]└─$ps-ef|grephttpd|grep-vgreproot12311002:00?00:00:00/usr/sbin/httpd-DFOREGROUNDapache12321231002:00?00:00:00/usr/sbin/httpd-DFOREGROUNDapache12331231002:00?00:00:00/usr/sbin/httpd-DFOREGROUNDapache12341231002:00?00:00:00/usr/sbin/httpd-DFOREGROUNDapache12351231002:00?00:00:00/usr/sbin/httpd-DFOREGROUNDapache12361231002:00?00:00:00/usr/sbin/httpd-DFOREGROUND┌──[root@]-[~]└─$cat/proc/1231/cgroupsystemd-cgtop提供的统计数据和控制选项与top实用工具所提供的相近┌──[root@]-[~]└─$systemd-cgtop

第4章控制群组应用示例4.1.定义数据库I/O的优先级

在数据库服务器专用的虚拟机内部运行数据库服务器实例,让您可以根据数据库的优先级来为其分配资源。

系统在两个KVM虚拟机内部运行两个数据库服务器。一个数据库的优先级较高,另一个较低。当两个数据库服务器同时运行,I/O吞吐量会降低来均等地容纳两个数据库的请求;

为能优先处理来自优先级高的数据库服务器请求,可将此服务器分配给一个I/O操作预留量高的cgroup,而优先级低的数据库服务器可以分配给一个I/O操作预留量少的cgroup。可按照以下步骤过程4.1,“I/O吞吐量优先化”来完成此操作,这些步骤将全部在主机系统上执行。

4.1.1I/O吞吐量优先化
如果将高优先级和低优先级服务的比率设定为10:1,那么在这些服务单位中运行的进程将只能使用可用资源:=1000=100
4.2.定义网络流量的优先级

在单一服务器系统中运行多项与网络相关的服务时,定义这些服务的网络优先级是很重要的。定义优先级可以保证源自特定服务的数据包比源自其它服务的数据包享有更高优先级。

例如,当一台服务器系统同时起到NFS服务器和Samba服务器的作用时,优先级就显得尤为重要。NFS必须享有高优先权,因为用户会预期较高吞吐量。Samba的优先级可以较低,以确保NFS服务器有更佳表现。

net_prio管控器可以用来为cgroup中的进程设定网络优先级。之后,优先级会被转译为TypeOfService(TOS,服务类型)比特,并嵌入每一个数据包中。

4.2.1为共享服务的文件设定网络优先级

net_prio管控器并未编译进kernel,它是一个必须手动装载的模块。如需装载,请输入:

modprobenetprio_cgroup

请将net_prio子系统附加到/cgroup/net_priocgroup中:

mkdirsys/fs/cgroup/net_priomount-tcgroup-onet_priononesys/fs/cgroup/net_prio

请为各项服务创建其cgroup:

mkdirsys/fs/cgroup/net_prio/nfs_highmkdirsys/fs/cgroup/net_prio/samba_low

如希望nfs服务被自动移至nfs_highcgroup,请将下列行添至/etc/sysconfig/nfs文件:

CGROUP_DAEMON="net_prio:nfs_high"

此配置可确保nfs服务启动或重启时,nfs服务进程已被移至nfs_highcgroup。
smbd后台驻留程序在/etc/sysconfig目录中没有配置文件。为实现将smbd后台驻留程序自动移至samba_lowcgroup,请添加下列行至/etc/文件:

*:smbdnet_priosamba_low

请注意:此规则会将每一个smbd后台驻留程序(不仅仅是/usr/sbin/smbd)移至samba_lowcgroup。

您可以用相似的方式为nmbd和winbindd后台驻留程序定义规则,将它们移至samba_lowcgroup。

请启动cgred服务,以载入之前步骤的配置:Cgred是​​一​​​个​​​守​​​护​​​进​​​程​​​,它​​​可​​​根​​​据​​​在​​​etc/文​​​件​​​中​​​设​​​定​​​的​​​参​​​数​​​将​​​任​​​务​​​移​​​动​​​到​​​cgroup中​​​。

systemctlstartcgredStartingCGroupRulesEngineDaemon:[OK]

至于此示例的目的,让我们假设两项服务都使用eth1网络接口;给每一个cgroup定义优先级:1表示优先级低,10表示优先级高:

echo"eth11"/sys/fs/cgroup/net_prio/samba_low/net_"eth110"/sys/fs/cgroup/net_prio/nfs_high/net_

请启动nfs和smb服务以检查各自的进程是否已被移至正确的cgroup:

~]cat/sys/fs/cgroup/net_prio/samba_low/tasks1612216124~]catsys/fs/cgroup/net_prio/nfs_high/tasks163211632516376
Systemctl介绍

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。

Systemd是一个系统管理守护进程、工具和库的集合,用于取代SystemV初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。

┌──[root@]-[~]└─$whereissystemd检查systemd是否正在运行。root10018:44?00:00:06/usr/lib/systemd/systemd--system--deserialize17root4381018:44?00:00:00/usr/lib/systemd/systemd-journalddbus5731018:45?00:00:00/bin/dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activationroot5851018:45?00:00:00/usr/lib/systemd/systemd-logindroot13091019:17?00:00:00/usr/lib/systemd/systemd-machinedroot27331021:13?00:00:00/usr/lib/systemd/systemd-udevd┌──[root@]-[~]└─$systemd--version-bash:systemd:commandnotfound┌──[root@]-[~]└─$systemd-analyze分析每个进程在引导时花费的时间10.362┌──[root@]-[~]└─$systemd-analyzecritical-chain列出所有可用的单位UNITFILESTATEproc-sys-fs-binfmt__@.@.@.┌──[root@]-[~]└─$systemctllist-units列出所有失败的单元0,'systemctllist-unit-files'.┌──[root@]-[~]└─$检查单元或服务是否正在运●:loaded(/usr/lib/systemd/system/;disabled;vorpreset:enabled)Active:inactive(dead)Docs:man:firewalld(1)
使用Systemctl控制和管理服务
┌──[root@]-[~]└─$systemctllist-unit-files--type=service在Linux中启动,重新启动,停止,重新加载和检查服务()的状态└─$┌──[root@]-[~]└─$┌──[root@]-[~]└─$如何在引导时激活服务并启用或禁用服务(系统引导时自动启动服务)└─$┌──[root@]-[~]└─$如何屏蔽(使其无法启动)或取消屏蔽服务()└─$ln-s'/dev/null''/etc/systemd/system/'┌──[root@]-[~]└─$/etc/systemd/system/┌──[root@]-[~]└─$rm'/etc/systemd/system/'rm:cannotremove‘/etc/systemd/system/’:Nosuchfileordirectory┌──[root@]-[~]└─$systemctlkillhttpd.如何装载,卸载,重新装载,重新装载系统装载点,以及检查系统上装载点的状态└─$┌──[root@]-[~]└─$┌──[root@]-[~]└─$┌──[root@]-[~]└─$
使用Systemctl控制和管理套接字
┌──[root@]-[~]└─$systemctllist-unit-files--type=┌──[root@]-[~]└─$┌──[root@]-[~]└─$┌──[root@]-[~]└─$┌──[root@]-[~]└─$

服务的CPU利用率(份额)

┌──[root@]-[~]└─$=600┌──[root@]-[~]└─$
检查服务的所有配置详细信息
┌──[root@]-[~]└─$systemctlshowhttpdType=notifyRestart=noNotifyAccess=mainRestartUSec=100msTimeoutStartUSec=1min30sTimeoutStopUSec=1min30sWatchdogUSec=0WatchdogTimestampMonotonic=0StartLimitInterval=10000000StartLimitBurst=5StartLimitAction=noneFailureAction=nonePermissionsStartOnly=noRootDirectoryStartOnly=noRemainAfterExit=noGuessMainPID=yesMainPID=0ControlPID=0FileDescriptorStoreMax=0StatusText=Totalrequests:0;Currentrequests/sec:0;Currenttraffic:0B/secStatusErrno=0Result=exit-codeExecMainStartTimestamp=Wed2021-10-1302:00:13CSTExecMainStartTimestampMonotonic=421085770ExecMainExitTimestamp=Thu2021-10-1421:21:12CSTExecMainExitTimestampMonotonic=9398280544ExecMainPID=1231ExecMainCode=1ExecMainStatus=0
分析服务的关键链(httpd)
┌──[root@]-[~]└─$"@""+"+361ms└─@14.513s
获取服务的依赖项列表(httpd)
┌──[root@]-[~]└─$●├─-.mount●├─●└─●├─●├─●├─●├─●├─●├─●├─selinux-policy-migrate-local-changes@●├─●├─●│├─-.slice●│└─●├─●│├─●│├─●│├─●│├─●│├─●│└─●├─●│├─●│├─●│├─●│├─●│├─●│├─proc-sys-fs-binfmt_┌──[root@]-[~]└─$systemd-cgtop┌──[root@]-[~]└─$启动系统救援模式┌──[root@]-[~]└─$进入紧急模式
列出当前使用的运行级别
┌──[root@]-[~]└─$┌──[root@]-[~]┌──[root@]-[~]└─$启动Runlevel3又称多用户模式(命令行)└─$将多用户模式或图形模式设置为默认运行级别└─$
控制系统运行级别
┌──[root@]-[~]└─$systemctlhalt┌──[root@]-[~]└─$systemctlhibernate┌──[root@]-[~]└─$#systemctlhybrid-sleep┌──[root@]-[~]└─$