Ana içeriğe atla

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.

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/setting-limits-for-applications_managing-monitoring-and-updating-the-kernel


Yukarıda belirttlen ihtiyaçları karşılamanın birden çok çözümü olduğunu unutmayın. 

Unutmamamınz  önemli bir nokta güncel sistemlerde (rhel 7/8/9 veya türevleri) uygulamaya veya kullanıcıya limit vermek için /etc/security/limits.con veya /etc/security/limits.d/*.conf dosyalarının kullanılamayacağı. Örneğin /etc/security/limits.conf ile bir kullanıcıya limit verirseniz ve kullanıcı ssh ile sisteme bağlanırsa verdiğiniz limit bir işe yaramaz. Systemd tarafından varsayılan değer ne ise o kullanılır...

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

Bu blogdaki popüler yayınlar

ttnet tilgin hg1332 modem(router) kablosuz özelliğini güçlendirmek

Bu gün ttnetin hediyesi olan tilgin yönlendiriciyle biraz oynayayım dedim Matkap, ve rg316-rp-sma kablo alıp cihazın kapağını tekrar açtım. Matkapla usb çıkışın yanına bir delik açarak kaployu taktım. Sonra elimdeki antenlerden ikiti tanesini takıp test ettim. . Bu iki antenin, gözle farkedilir derecede sinyalleri kuvvetlendirdiğini fark ettim.. Normalde bu cihaz ile evin iki en uc noktaları arasında haberleşme olmaz iken şimdi en kör iki uç arasında sorun olmadan kablosuz kullanılabildiğini gördüm. Arada 4 tane kuvvetli beton duvar mevcut. Deneme bitti, tilgin rafa kalktı yine. Her nekadar ben bu cihazı kaldırsamda, kullanmak zorunda olan arkadaşlar, bir kablo ve ikitane anten takarak her herde kullanabilirler. İyi eğlenceler.

yerel ssl ca sertifikasını güvenli sertifika olarak kabul etmek. (özet tekrar)

  openssl s_client  -connect akyuz.tech:443 -showcerts > /tmp/akyuz.tech.cacrt keytool -import -alias akyuz.tech  -keystore  /etc/pki/ca-trust/extracted/java/cacerts -file /tmp/akyuz.tech.cacrt /etc/pki/ca-trust/extracted/java/cacerts dosyası varsayılan java için varsayılan ca cert dosyasıdır.   cp -iv /tmp/akyuz.tech.cacrt /etc/pki/ca-trust/source/anchors/ update-ca-trust     DOMAIN=akyuz.tech openssl s_client -showcerts -connect ${DOMAIN}:443 </dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' > ${DOMAIN}.cert