Linux Yöneticisi - Gruplarla Kaynak Yönetimi
cgroups veya Control Groups, bir yöneticinin hizmetler ve ayrıca grup için sistem kaynaklarını tahsis etmesine veya sınırlamasına izin veren Linux çekirdeğinin bir özelliğidir.
Çalışan aktif kontrol gruplarını listelemek için aşağıdaki ps komutunu kullanabiliriz -
[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 itibariyle Kaynak Yönetimi, systemd init uygulamasıyla yeniden tanımlanmıştır . Hizmetler için Kaynak Yönetimini düşünürken, odaklanılması gereken en önemli şey gruplardır .cgroupssystemd ile hem işlevsellik hem de basitlik açısından gelişmiştir .
Kaynak yönetiminde grupların amacı şudur: Hiç kimse sistemi bir bütün olarak devre dışı bırakamaz. Ya da tek bir hizmet süreci (belki de kötü yazılmış bir PHP betiği) çok fazla kaynak tüketerek sunucu işlevselliğini sakatlamaz.
cgroups , aşağıdaki kaynaklar için birimlerin kaynak denetimine izin verir -
CPU - Diğer, daha az yoğun görevler kadar kritik olmayan işlemci yoğun görevleri sınırlandırın
Memory - Bir hizmetin ne kadar bellek tüketebileceğini sınırlayın
Disks - Disk giriş / çıkışını sınırlayın
** CPU Süresi: **
Daha az CPU önceliğine ihtiyaç duyan görevler, özel olarak yapılandırılmış CPU Slices'e sahip olabilir.
Örneğin aşağıdaki iki hizmete bir göz atalım.
Kibar CPU Hizmeti 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]#
Kötü CPU Hizmeti 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]#
Daha düşük bir CPU önceliği kullanarak Sonradan Hizmet ayarlayalım -
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 - -
Gördüğümüz gibi, normal bir sistem boşta kalma süresi boyunca, her iki hileli işlem hala CPU döngülerini kullanıyor. Ancak, daha az zaman dilimine sahip bir set daha az CPU zamanı kullanıyor. Bunu aklımızda tutarak, daha az zaman dilimi kullanmanın temel görevlerin sistem kaynaklarına daha iyi erişmesine nasıl izin vereceğini görebiliriz.
Her kaynak için hizmetleri ayarlamak üzere set özelliği yöntemi aşağıdaki parametreleri tanımlar -
systemctl set-property name parameter=value
CPU Dilimleri | CPUShares |
Bellek Sınırı | MemoryLimit |
Esnek Bellek Sınırı | MemorySoftLimit |
Blok IO Ağırlığı | BlockIOWeight |
Aygıt Sınırını Engelle (/ birim / yol içinde belirtilir) | BlockIODeviceWeight |
IO'yu okuyun | BlockIOReadBandwidth |
Disk Yazma GÇ | BlockIOReadBandwidth |
Çoğu zaman hizmetler CPU kullanımı , Bellek sınırları ve Okuma / Yazma GÇ ile sınırlı olacaktır .
Her birini değiştirdikten sonra, systemd'yi yeniden yüklemek ve servisi yeniden başlatmak gerekir -
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
CentOS Linux'ta CGroups Yapılandırın
CentOS Linux'ta özel gruplar oluşturmak için önce hizmetleri kurmamız ve yapılandırmamız gerekir.
Step 1 - libcgroup'u kurun (henüz kurulu değilse).
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
Gördüğümüz gibi, varsayılan olarak CentOS 7, her şey yükleyiciyle birlikte libcgroup'a sahiptir . Minimal bir yükleyici kullanmak, libcgroup yardımcı programlarını herhangi bir bağımlılıkla birlikte yüklememizi gerektirecektir .
Step 2 - cgconfig hizmetini başlatın ve etkinleştirin.
[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]#