Admin Linux - Manajemen Sumber Daya dengan crgoups
cgroups atau Control Groups adalah fitur kernel Linux yang memungkinkan administrator mengalokasikan atau membatasi sumber daya sistem untuk layanan dan juga grup.
Untuk membuat daftar grup kontrol aktif yang berjalan, kita dapat menggunakan perintah ps berikut -
[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
Manajemen Sumber Daya, pada CentOS 6.X, telah didefinisikan ulang dengan implementasi systemd init . Saat memikirkan Manajemen Sumber Daya untuk layanan, hal utama yang harus difokuskan adalah cgroup .cgroupstelah maju dengan systemd baik dalam fungsionalitas maupun kesederhanaan.
Tujuan dari cgroups dalam manajemen sumber daya adalah -tidak ada layanan yang dapat membuat sistem secara keseluruhan turun. Atau tidak ada proses layanan tunggal (mungkin skrip PHP yang ditulis dengan buruk) yang akan melumpuhkan fungsionalitas server dengan mengonsumsi terlalu banyak sumber daya.
cgroups memungkinkan kontrol sumber daya unit untuk sumber daya berikut -
CPU - Batasi tugas intensif cpu yang tidak penting seperti tugas lain yang kurang intensif
Memory - Batasi berapa banyak memori yang dapat dikonsumsi suatu layanan
Disks - Batasi i / o disk
** Waktu CPU: **
Tugas yang membutuhkan lebih sedikit prioritas CPU dapat memiliki CPU Slice yang dikonfigurasi khusus.
Mari kita lihat dua layanan berikut ini sebagai contoh.
Layanan CPU yang Sopan 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]#
Layanan CPU Jahat 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]#
Mari atur Polite Service menggunakan prioritas CPU yang lebih rendah -
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 - -
Seperti yang dapat kita lihat, selama periode waktu idle sistem normal, kedua proses nakal tersebut masih menggunakan siklus CPU. Namun, satu set untuk memiliki lebih sedikit pembagian waktu adalah menggunakan lebih sedikit waktu CPU. Dengan pemikiran ini, kita dapat melihat bagaimana menggunakan pembagian waktu yang lebih singkat akan memungkinkan tugas-tugas penting mengakses sumber daya sistem dengan lebih baik.
Untuk menyetel layanan untuk setiap sumber daya, metode set-property mendefinisikan parameter berikut -
systemctl set-property name parameter=value
Irisan CPU | CPUShares |
Batas Memori | MemoryLimit |
Batas Memori Lunak | MemorySoftLimit |
Blok IO Weight | BlockIOWeight |
Blokir Batas Perangkat (ditentukan di / volume / jalur)) | BlockIODeviceWeight |
Baca IO | BlockIOReadBandwidth |
Penulisan Disk IO | BlockIOReadBandwidth |
Seringkali layanan akan dibatasi oleh penggunaan CPU , batas memori dan IO Baca / Tulis .
Setelah mengubah masing-masing, perlu memuat ulang systemd dan memulai ulang layanan -
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
Konfigurasikan CGroups di CentOS Linux
Untuk membuat cgroup kustom di CentOS Linux, pertama kita perlu menginstal layanan dan mengkonfigurasinya.
Step 1 - Instal libcgroup (jika belum diinstal).
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
Seperti yang bisa kita lihat, secara default CentOS 7 telah menginstal libcgroup dengan penginstal semuanya . Menggunakan penginstal minimal akan mengharuskan kita menginstal utilitas libcgroup bersama dengan dependensi apa pun.
Step 2 - Mulai dan aktifkan layanan 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]#