
- 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]#