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.

docker servisi proxy ayarı

  /etc/systemd/system/docker.service.d/http-proxy.conf   [Service] Environment="HTTP_PROXY= http://10.27.152.40:8080" Environment="HTTPS_PROXY= http://10.27.152.40:8080" # systemctl daemon-reload # systemctl restart docker # systemctl show --property=Environment docker

internet servis sağlayıcıları gerçekten tam bir servis sağlıyor mu?

 Bu ay taşındıktan sonra eski evde kullandığımız süperonline kullanmaya devam edeyim dedim ve bin pişman oldum. Eski evde süperonline dinamek gerçek ip adresi ile hizmet verirken, yeni yerde cgnat-sanal ip adresi ile hizmet vermeye başlamışlar. Sözde biz kullanıcıların menfaite olan bu davranış, aslında biz kullanıcıların zararına, superonline kullanıcı başına aylık ortalama +2$ kar sağlamasına yarıyor. Çünkü gerçek ip adresinin maliyeti ortalama $2 :-) Gerçek dinamik ip adresi vermemeleri, statik ip adresi kullanmaya zorlamalarından dolayı süperonline aboneliğim 15 gün sürdü. 15 Gün sürmesinin nedenide süperonline beni yanıltması, gerçek cevabı geciktirmesi. Çünkü bir hizmet ve ürün alımında ilk 14 gün neden göstermeksizin anlaşmadan vaz geçilebiliyor!!! Kişisel tecrübemle Türkcell Süperonline   dan kesinlikle bir daha hizmet almam, kimseyede tavsiye etmem.  Umarım gelecekte süperonline müşterilerine karşı açık ve net bilgi verir, müşteri odaklı bir şirket olur....