Quản trị viên Linux - Quản lý tài nguyên với crgoups
cgroups hoặc Control Groups là một tính năng của nhân Linux cho phép quản trị viên phân bổ hoặc giới hạn tài nguyên hệ thống cho các dịch vụ và cả nhóm.
Để liệt kê các nhóm điều khiển đang hoạt động , chúng ta có thể sử dụng lệnh ps sau :
[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
Quản lý tài nguyên, kể từ CentOS 6.X, đã được định nghĩa lại với việc triển khai systemd init . Khi nghĩ Quản lý tài nguyên cho các dịch vụ, điều chính cần tập trung là các nhóm .cgroupsnâng cao với systemd về cả chức năng và tính đơn giản.
Mục tiêu của các nhóm trong quản lý tài nguyên là - không một dịch vụ nào có thể làm suy giảm toàn bộ hệ thống. Hoặc không có quy trình dịch vụ đơn lẻ nào (có thể là một tập lệnh PHP được viết kém) sẽ làm tê liệt chức năng của máy chủ do tiêu tốn quá nhiều tài nguyên.
cgroups cho phép kiểm soát tài nguyên của các đơn vị đối với các tài nguyên sau:
CPU - Hạn chế các tác vụ chuyên sâu về cpu không quan trọng như các tác vụ ít chuyên sâu khác
Memory - Giới hạn dung lượng bộ nhớ mà một dịch vụ có thể sử dụng
Disks - Giới hạn i / o đĩa
** Thời gian CPU: **
Các tác vụ cần ít ưu tiên CPU hơn có thể có các Lát CPU được cấu hình tùy chỉnh.
Chúng ta hãy xem xét hai dịch vụ sau đây chẳng hạn.
Dịch vụ CPU lịch sự 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]#
Dịch vụ CPU ác 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]#
Hãy đặt Dịch vụ lịch sự bằng cách sử dụng mức ưu tiên CPU thấp hơn -
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 - -
Như chúng ta có thể thấy, trong một khoảng thời gian hệ thống không hoạt động bình thường, cả hai tiến trình giả mạo vẫn đang sử dụng chu kỳ CPU. Tuy nhiên, một bộ để có ít thời gian hơn là sử dụng ít thời gian CPU hơn. Với suy nghĩ này, chúng ta có thể thấy việc sử dụng một khoảng thời gian ngắn hơn sẽ cho phép các tác vụ thiết yếu truy cập tài nguyên hệ thống tốt hơn như thế nào.
Để đặt dịch vụ cho từng tài nguyên, phương thức set-property xác định các tham số sau:
systemctl set-property name parameter=value
CPU Slices | CPUShares |
Giới hạn bộ nhớ | Giới hạn bộ nhớ |
Giới hạn bộ nhớ mềm | MemorySoftLimit |
Khối lượng IO | BlockIOWeight |
Giới hạn thiết bị chặn (được chỉ định trong / volume / path)) | BlockIODeviceWeight |
Đọc IO | BlockIOReadBandwidth |
Ghi đĩa IO | BlockIOReadBandwidth |
Thông thường, các dịch vụ sẽ bị giới hạn bởi việc sử dụng CPU , giới hạn bộ nhớ và IO Đọc / Ghi .
Sau khi thay đổi từng thứ, cần tải lại systemd và khởi động lại dịch vụ -
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
Định cấu hình nhóm CG trong CentOS Linux
Để tạo các nhóm tùy chỉnh trong CentOS Linux, trước tiên chúng ta cần cài đặt các dịch vụ và định cấu hình chúng.
Step 1 - Cài đặt libcgroup (nếu chưa cài đặt).
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
Như chúng ta thấy, mặc định CentOS 7 đã cài đặt libcgroup với trình cài đặt mọi thứ . Việc sử dụng một trình cài đặt tối thiểu sẽ yêu cầu chúng tôi cài đặt các tiện ích libcgroup cùng với bất kỳ phụ thuộc nào.
Step 2 - Khởi động và kích hoạt dịch vụ 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]#