Ana Sayfa

systemd Servislerini Aşırı CPU Kullanımında Yeniden Başlatma

1 dk okuma

Bu makale, Linux sistemlerinde systemd servislerinin aşırı CPU kullanımı durumunda otomatik olarak nasıl yönetileceğini ve yeniden başlatılacağını ele alıyor. Yazar, LXC konteynerlerinde avahi-daemon gibi servislerin CPU'yu sürekli yüksek seviyelerde kullanması sorununa bir çözüm arayışını paylaşıyor. Amaç, bir servisi %10 CPU kullanımına sınırlamak, bu sınırı aştığında hemen yeniden başlatmak ve %5'in üzerinde sürekli kullanımda da müdahale etmek.

Çözümün büyük bir kısmı systemd'nin yerleşik özellikleriyle sağlanırken, geri kalan küçük bir bölümü özel bir izleme (watchdog) betiği ve zamanlayıcı ile tamamlanıyor. İlk adım olarak, systemctl edit avahi-daemon komutuyla servise CPUAccounting=yes ve CPUQuota=10% gibi ayarlar eklenerek CPU kullanımı sınırlandırılıyor ve hata durumunda yeniden başlatma (Restart=on-failure) yapılandırılıyor.

Ardından, /usr/local/sbin/cpu-watch.sh adında bir betik oluşturuluyor. Bu betik, systemctl show "$UNIT" -p CPUUsageNSec komutuyla servisin CPU kullanımını belirli aralıklarla kontrol ediyor. Eğer CPU kullanımı belirlenen kotanın (%90'ı) üzerine çıkarsa veya sürekli olarak %5'in üzerinde kalırsa, systemctl restart "$UNIT" komutuyla ilgili servisi yeniden başlatıyor. Bu betik, systemd şablonları (cpu-watch@.service ve cpu-watch@.timer) kullanılarak sistem genelinde etkinleştiriliyor. Bu yapılandırma sayesinde, kısa CPU ani yükselişleri göz ardı edilirken, sürekli veya aşırı CPU kullanımı durumunda servislerin otomatik olarak yönetilmesi ve sistem kararlılığının korunması sağlanıyor.

İçgörü

Bu yöntem, sistem yöneticilerine kritik servislerin beklenmedik CPU yüklenmeleri karşısında otomatik olarak toparlanmasını sağlayan sağlam ve systemd tabanlı bir çözüm sunar.

Kaynak