- Linux 系统管理员教程
- 首页
- CentOS 概述
- 基本的 CentOS Linux 命令
- 文件/文件夹管理
- 用户管理
- 配额管理
- Systemd 服务启动和停止
- 使用 systemctl 进行资源管理
- 使用 crgoups 进行资源管理
- 进程管理
- 防火墙设置
- 在 CentOS Linux 中配置 PHP
- 在 CentOS Linux 中设置 Python
- 在 CentOS Linux 中配置 Ruby
- 在 CentOS Linux 中设置 Perl
- 安装和配置 Open LDAP
- 创建 SSL 证书
- 安装 Apache Web 服务器 CentOS 7
- 在 CentOS 7 上设置 MySQL
- 设置 Postfix MTA 和 IMAP/POP3
- 安装匿名 FTP
- 远程管理
- CentOS 中的流量监控
- 日志管理
- 备份和恢复
- 系统更新
- Shell 脚本
- 软件包管理
- 卷管理
- Linux 系统管理员有用资源
- Linux 系统管理员 - 快速指南
- Linux 系统管理员 - 有用资源
- Linux 系统管理员 - 讨论
Linux 系统管理员 - 使用 cgroups 进行资源管理
cgroups 或控制组是 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 init实现重新定义。在考虑服务的资源管理时,主要关注的是cgroups。cgroups在功能和简易性方面都随着systemd而发展。
cgroups 在资源管理中的目标是 - 任何服务都不能使整个系统崩溃。或者没有单个服务进程(可能是编写不佳的 PHP 脚本)会通过消耗过多资源来削弱服务器功能。
cgroups 允许对以下资源的单元进行资源控制:
CPU - 限制那些不重要的 CPU 密集型任务,以便其他不太密集的任务能够运行。
内存 - 限制服务可以消耗的内存量。
磁盘 - 限制磁盘 I/O。
**CPU 时间:**
需要较低 CPU 优先级的任务可以拥有自定义配置的 CPU 时间片。
让我们以以下两个服务为例。
礼貌的 CPU 服务 1
[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]#
恶意的 CPU 服务 2
[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 时间片 | CPUShares |
内存限制 | MemoryLimit |
软内存限制 | MemorySoftLimit |
块 IO 权重 | BlockIOWeight |
块设备限制(在 /volume/path 中指定)) | BlockIODeviceWeight |
读取 IO | BlockIOReadBandwidth |
磁盘写入 IO | BlockIOReadBandwidth |
大多数情况下,服务将受到CPU 使用率、内存限制和读/写 IO的限制。
更改每个参数后,需要重新加载 systemd 并重新启动服务:
systemctl set-property foo.service CPUShares = 250 systemctl daemon-reload systemctl restart foo.service
在 CentOS Linux 中配置 CGroups
要在 CentOS Linux 中创建自定义 cgroups,我们需要首先安装服务并对其进行配置。
步骤 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 已通过everything安装程序安装了 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]#