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