RHEL 7.X/8.X/9.X veya RHEL 7.X/8.X/9.X tabanlı linux sistemlerde kaynak yönetimi ( cpu/memory/io yönetimi)
Günümüzde bazı sunucuların üzerinde birden çok uygulama veya çözümü beraber kullanmak zorunda kalıyoruz. Böyle durumlarda sistem kaynaklarını uygulamalar arasında uygun bir şekilde paylaştırmak zorunda kalıyoruz.
Örneğin bir sunucu üzerinde web ve database uygulamasını aynı anda kullanıyoruz, fakat zaman zaman web, zaman zman database sistemin tamamen tıkanmasına neden oluyor. Çözüm olarak sistem işlemci kaynağının %50 database, %25 web uygulamasına, %25 sshd ihtiyaçları için kullanılacak şekilde kaynak kullanım planlanması olabilir. Bu işlemi nasıl yapabiliriz?
Asagidaki link baslangic noktamiz olabilir.
Yukarıda belirttlen ihtiyaçları karşılamanın birden çok çözümü olduğunu unutmayın.
Aşağıda anlatacaklarım çözüm yollarından sadece bir tanesi ve kullanılması gereken yöntem;
öncelikle database, web ve ssh servisinin bir slice altında tutacağız. Bunun için aşağıdaki gibi dosya oluşturalım.
[root@rhel8 system]# cat /etc/systemd/system/uygulamaservisi.slice
[unit]
Description=Uygulama hizmeti icin (Web + Database) servisi slice
[Slice]
CPUShare=1536
CPUAccounting=yes
[root@rhel8 system]#
[root@rhel8 system]# grep -A20 Unit /etc/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
Wants=httpd-init.service
After=network.target remote-fs.target nss-lookup.target httpd-init.service
Documentation=man:httpd.service(8)
[Service]
Type=notify
Environment=LANG=C
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
# Send SIGWINCH for graceful stop
KillSignal=SIGWINCH
KillMode=mixed
PrivateTmp=true
Slice=uygulamaservisi.slice
CPUShares=256
root@rhel8 system]# grep -A20 Unit /etc/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
Slice=uygulamaservisi.slice
CPUShares=256
LimitNOFILE=128
root@rhel8 system]# grep -A20 Unit /etc/systemd/system/mariadb.service
[Unit]
Description=MariaDB 10.5 database server
Documentation=man:mysqld(8)
Documentation=https://mariadb.com/kb/en/library/systemd/
After=network.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
Alias=mysqld.service
[Service]
Slice=uygulamaservisi.slice
CPUShares=1024
LimitNOFILE=512
...
ssh,http,mariadb için toplam 1536 cpushares kullanılmış durumda.
Bir çekirdek 1024 cpushares olarak kabul ediliyor.
Yurakıdaki ayarlamalardan sonra systemctl daemon-reload ile güncellemelerin systemd tarafında algılanmasını sağlayıp, sonrasında servisleri yeniden başlatmamız yeterli.
İşlemci kullanımını paylaştırdıktan sonra ram kullanımınıda paylaştırmak istersek aşağıdaki işlemleri kullanabiliriz.
[root@rhel8 memory]# tree -L 1 -d /sys/fs/cgroup/memory
/sys/fs/cgroup/memory
├── init.scope
├── system.slice
├── user.slice
└── uygulamaservisi.slice
4 directories
[root@rhel8 memory]# tree -L 1 -d /sys/fs/cgroup/memory/uygulamaservisi.slice
/sys/fs/cgroup/memory/uygulamaservisi.slice
├── httpd.service
├── mariadb.service
└── sshd.service
3 directories
[root@rhel8 memory]#
systemd-cgls ile kontrol yaptığımızda aşağıdakilerini görürüz.
[root@rhel8 system]# systemd-cgls
Control group /:
-.slice
├─user.slice
│ └─user-0.slice
│ ├─session-1.scope
│ │ ├─1886 sshd: root [priv]
│ │ ├─1900 sshd: root@pts/0
│ │ ├─1901 -bash
│ │ └─1984 systemd-cgls
│ └─user@0.service
│ └─init.scope
│ ├─1891 /usr/lib/systemd/systemd --user
│ └─1894 (sd-pam)
├─init.scope
│ └─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
├─system.slice
│ ├─irqbalance.service
│ │ └─903 /usr/sbin/irqbalance --foreground
│ ├─libstoragemgmt.service
│ │ └─900 /usr/bin/lsmd -d
│ ├─systemd-udevd.service
│ │ └─774 /usr/lib/systemd/systemd-udevd
│ ├─polkit.service
│ │ └─899 /usr/lib/polkit-1/polkitd --no-debug
│ ├─chronyd.service
│ │ └─909 /usr/sbin/chronyd
│ ├─auditd.service
│ │ ├─874 /sbin/auditd
│ │ └─876 /usr/sbin/sedispatch
│ ├─tuned.service
│ │ └─951 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
│ ├─php-fpm.service
│ │ ├─ 956 php-fpm: master process (/etc/php-fpm.conf)
│ │ ├─1036 php-fpm: pool www
│ │ ├─1037 php-fpm: pool www
│ │ ├─1038 php-fpm: pool www
│ │ ├─1039 php-fpm: pool www
│ │ └─1040 php-fpm: pool www
│ ├─systemd-journald.service
│ │ └─738 /usr/lib/systemd/systemd-journald
│ ├─atd.service
│ │ └─1311 /usr/sbin/atd -f
│ ├─crond.service
│ │ └─1309 /usr/sbin/crond -n
│ ├─NetworkManager.service
│ │ └─940 /usr/sbin/NetworkManager --no-daemon
│ ├─rsyslog.service
│ │ └─1304 /usr/sbin/rsyslogd -n
│ ├─firewalld.service
│ │ └─923 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
│ ├─qemu-guest-agent.service
│ │ └─898 /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio-ports/or...
│ ├─sssd.service
│ │ ├─904 /usr/sbin/sssd -i --logger=files
│ │ ├─920 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 -...
│ │ └─924 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
│ ├─rhsmcertd.service
│ │ └─955 /usr/bin/rhsmcertd
│ ├─mcelog.service
│ │ └─907 /usr/sbin/mcelog --ignorenodev --daemon --foreground
│ ├─dbus.service
│ │ └─902 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfi...
│ ├─system-getty.slice
│ │ └─getty@tty1.service
│ │ └─1336 /sbin/agetty -o -p -- \u --noclear tty1 linux
│ ├─smartd.service
│ │ └─901 /usr/sbin/smartd -n -q never
│ └─systemd-logind.service
│ └─931 /usr/lib/systemd/systemd-logind
└─uygulamaservisi.slice
├─mariadb.service
│ └─1033 /usr/libexec/mysqld --basedir=/usr
├─sshd.service
│ └─954 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly130...
└─httpd.service
├─1301 /usr/sbin/httpd -DFOREGROUND
├─1392 /usr/sbin/httpd -DFOREGROUND
├─1393 /usr/sbin/httpd -DFOREGROUND
├─1394 /usr/sbin/httpd -DFOREGROUND
└─1396 /usr/sbin/httpd -DFOREGROUND
[root@rhel8 system]#
Günün sonunda tüm servisler belirlenen kaynakları kullanır, belirtilen dışına çıkamazlar. Böylelikle çok yoğun bir kullanımda bile yavaşda olsa, ssh, web, db ye erişebiliriz.
Sistem çalışma anındaki kullanımı ise systemd-cgtop ile izleyebiliriz.
Aktif olarak kullanılan limitleri;
systemctl show -p ozellik service
şeklinde sorgulayabiliriz.
[root@rhel8 system]# systemctl show -p CPUShares sshd.service
CPUShares=256
[root@rhel8 system]#
[root@rhel8 system]# systemctl show -p MemoryLimit sshd.service
MemoryLimit=268435456
[root@rhel8 system]#
Detaylı bilgi için
man systemd-cgls
man systemd-cgtop
Yorumlar
Yorum Gönder