📅  最后修改于: 2020-10-31 13:19:14             🧑  作者: Mango
cgroups或Control Groups是Linux内核的一项功能,允许管理员分配或限制用于服务以及组的系统资源。
要列出正在运行的活动控制组,我们可以使用以下ps命令-
[root@localhost]# ps xawf -eo pid,user,cgroup,args
8362 root - \_ [kworker/1:2]
1 root - /usr/lib/systemd/systemd --switched-
root --system -- deserialize 21
507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald
527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f
540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd
715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n
731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd
734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch
737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug
738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon
740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --
address=systemd: --nofork --nopidfile --systemd-activation
从CentOS 6.X开始,资源管理已使用systemd初始化实现进行了重新定义。在考虑将资源管理用于服务时,主要要关注的是cgroups 。 cgroup在systemd的功能和简单性方面都取得了进步。
cgroup在资源管理中的目标是-没有一个服务可以使整个系统停机。否则,没有任何一个服务进程(也许写得不好的PHP脚本)会因为消耗太多资源而削弱服务器功能。
cgroups允许对以下资源的单元进行资源控制-
CPU-限制CPU密集型任务,这些任务与其他强度较低的任务一样不重要
内存-限制服务可以消耗多少内存
磁盘-限制磁盘I / O
** CPU时间:**
需要较少CPU优先级的任务可以具有自定义配置的CPU Slice。
让我们看一下以下两个服务。
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
让我们使用较低的CPU优先级设置礼貌服务-
systemctl set-property polite.service CPUShares = 20
/system.slice/polite.service
1 70.5 124.0K - -
/system.slice/evil.service
1 99.5 304.0K - -
我们可以看到,在正常的系统空闲时间内,两个恶意进程仍在使用CPU周期。但是,时间片较少的一组使用较少的CPU时间。考虑到这一点,我们可以看到使用更少的时间片如何使基本任务更好地访问系统资源。
要为每个资源设置服务, set-property方法定义以下参数-
systemctl set-property name parameter=value
CPU Slices | CPUShares |
Memory Limit | MemoryLimit |
Soft Memory Limit | MemorySoftLimit |
Block IO Weight | BlockIOWeight |
Block Device Limit (specified in /volume/path) ) | BlockIODeviceWeight |
Read IO | BlockIOReadBandwidth |
Disk Write IO | BlockIOReadBandwidth |
通常,服务会受到CPU使用率,内存限制和读/写IO的限制。
更改每个之后,有必要重新加载systemd并重新启动服务-
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
要在CentOS Linux中创建自定义cgroup,我们需要首先安装服务并对其进行配置。
步骤1-安装libcgroup(如果尚未安装)。
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
如我们所见,默认情况下,CentOS 7随所有安装程序一起安装了libcgroup。使用最小的安装程序将需要我们安装libcgroup实用程序以及所有依赖项。
步骤2-启动并启用cgconfig服务。
[root@localhost]# systemctl enable cgconfig
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service
to /usr/lib/systemd/system/cgconfig.service.
[root@localhost]# systemctl start cgconfig
[root@localhost]# systemctl status cgconfig
● cgconfig.service - Control Group configuration service
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor
preset: disabled)
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago
Main PID: 4692 (code=exited, status = 0/SUCCESS)
Memory: 0B
CGroup: /system.slice/cgconfig.service
Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group
configuration service...
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group
configuration service.
[root@localhost]#