Linux Sistemlerde Swap Alanını Etkin Kullanma Teknikleri

Linux Sistemlerde Swap Alanını Etkin Kullanma Teknikleri
Yazı Özetini Göster

Linux Sunucularda CPU Limit Ayarları (cpulimit & cgroups)

Yoğun yük altındaki Linux sunucularda bazı süreçlerin tüm işlemci çekirdeklerini tüketmesi, diğer servislerin yanıt veremez hale gelmesine yol açabilir. CPU sınırlama (throttling) ve adil paylaştırma politikaları; SaaS, barındırma, çok kiracılı (multi-tenant) sistemler ve kapsayıcı (container) platformları için kritik öneme sahiptir. Bu rehberde, kullanıcı alanı aracı olan cpulimit ile çekirdek tarafı yetenekleri sunan cgroups (v1/v2) ve systemd üzerinden CPU limitlerinin nasıl tanımlanacağını, izleneceğini ve en iyi uygulamaları adım adım ele alıyoruz. Performans odaklı bir altyapı kurarken, ölçeklenebilir Linux Hosting, yüksek kaynak gerektiren iş yükleri için VDS ve Premium VDS çözümlerine de değineceğiz.

1) Yaklaşımların Kısa Özeti

  • cpulimit: Tekil süreç(ler)e kullanıcı alanından müdahale eder; CPU kullanımını yüzde ile kısar. Basit, hızlı; fakat sistem genelinde garantili adalet sağlamaz.
  • cgroups v1/v2: Çekirdek düzeyinde CPU, bellek, IO gibi kaynakları yönetir. Hizmet/servis/çevre (slice) bazında garanti ve tavan (quota) tanımlar.
  • systemd: cgroups için ergonomik bir yönetim katmanı sağlar; CPUQuota, CPUWeight gibi direktiflerle servis başına politika uygulanır.

2) cpulimit ile Hızlı Başlangıç

cpulimit, bir sürecin etkin CPU kullanım yüzdesini sınırlamak için SIGSTOP/SIGCONT sinyallerini kullanır. Kurulum:

# Debian/Ubuntu
sudo apt-get update && sudo apt-get install cpulimit

# RHEL/CentOS/Alma/Rocky (EPEL gerekebilir)
sudo dnf install cpulimit

Örnek Kullanımlar

# PID'i bilinen bir süreci %25 ile sınırla
sudo cpulimit -p 12345 -l 25

# Komutu başlat ve %40 CPU ile sınırla
sudo cpulimit -l 40 -- stress -c 4

# Adı 'php-fpm' geçen ilk süreci %50 ile sınırla
pgrep -f php-fpm | head -n1 | xargs -I{} sudo cpulimit -p {} -l 50

Artıları: Kurulumu ve kullanımı çok kolaydır. Eksileri: Birden fazla thread/proses ve yoğun çekirdek geçişlerinde sapmalar görülebilir; sistem çapında adil paylaştırma için cgroups tercih edilir.

3) cgroups v1 vs v2: Temeller ve Farklar

  • v1: Her kaynak kontrolörü (cpu, cpuacct, blkio, memory) ayrı hiyerarşilerdedir.
  • v2: Birleştirilmiş hiyerarşi; cpu.max, cpu.weight gibi daha net anahtarlar; daha iyi muhasebe.

Modern dağıtımlar (Debian 12, Ubuntu 22.04+, RHEL 9+) varsayılan olarak v2 kullanır. Durumu kontrol etmek için:

mount | grep cgroup2
cat /sys/fs/cgroup/cgroup.controllers

4) cgroups v2 ile CPU Kota (cpu.max) ve Ağırlık (cpu.weight)

cgroups v2’de bir denetim grubu (ör. /sys/fs/cgroup/tenantA) altında iki kritik dosya vardır:

  • cpu.maxkota ve periyot tanımlar (ör. 200000 100000 = her 100ms’de 200ms CPU zamanı → 2 çekirdeğe denk).
  • cpu.weight — 1–10000 arası göreli ağırlık (varsayılan 100). Aynı makinadaki farklı grupların adil paylaşımı için kullanılır.

Elle (geçici) cgroup oluşturma

# Grup oluştur
sudo mkdir -p /sys/fs/cgroup/tenantA

# 1 çekirdek eşdeğeri kota: 100ms periyotta 100ms
echo "100000 100000" | sudo tee /sys/fs/cgroup/tenantA/cpu.max

# Göreli ağırlığı artır (varsayılan 100 → 200)
echo 200 | sudo tee /sys/fs/cgroup/tenantA/cpu.weight

# PID'i gruba taşı
echo <PID> | sudo tee /sys/fs/cgroup/tenantA/cgroup.procs

Bu yöntem servis yeniden başlatmalarında kalıcı değildir; kalıcılık için systemd unit tanımlamak en iyi yoldur.

5) systemd ile Kalıcı CPU Politikaları

systemd, servis dosyalarında cgroup parametreleri için sezgisel direktifler sunar:

  • CPUQuota= — Yüzde cinsinden üst sınır (örn. CPUQuota=50%).
  • CPUWeight= — 1–10000 arası göreli ağırlık.
  • AllowedCPUs= — Belirli çekirdeklere pinleme (ör. 0-3).

Örnek: Nginx’i %40 ile sınırla

sudo systemctl edit nginx.service
[Service]
CPUQuota=40%
CPUWeight=200
sudo systemctl daemon-reload
sudo systemctl restart nginx
systemctl show -p CPUQuotaPerSecUSec nginx

Slice bazlı sınır (çoklu servis için)

sudo systemctl edit my-tenant.slice
[Slice]
CPUQuota=200%
CPUWeight=500
# Servisleri slice içine alın
sudo systemctl set-property php-fpm.service Slice=my-tenant.slice
sudo systemctl set-property mysqld.service  Slice=my-tenant.slice

Bu yapı, bir kiracının (tenant) tüm servislerini tek bir kaynak zarfı içinde tutarak adil paylaştırma sağlar; çok kiracılı Reseller Hosting veya PaaS senaryolarında idealdir.

6) cgroups v1’de CPU Kota (cpu.cfs_quota_us) Kısa Not

v1 kullanan dağıtımlarda eşdeğer dosyalar:

# 100ms periyotta 50ms CPU → %50
echo 100000 | sudo tee /sys/fs/cgroup/cpu/mygrp/cpu.cfs_period_us
echo  50000 | sudo tee /sys/fs/cgroup/cpu/mygrp/cpu.cfs_quota_us
echo <PID>   | sudo tee /sys/fs/cgroup/cpu/mygrp/tasks

7) Kapsayıcılar (Docker/Podman) ve Kubernetes

  • Docker: --cpus (toplam çekirdek eşdeğeri), --cpuset-cpus (pinleme), --cpu-shares (göreli ağırlık/v1) parametrelerini cgroups ile uygular.
    docker run --cpus="1.5" --cpuset-cpus="0-3" --name api myimage:latest
    
  • Kubernetes: Pod/Container için requests ve limits tanımlayın:
    resources:
      requests:
        cpu: "500m"
      limits:
        cpu: "2"
    

8) İzleme ve Doğrulama

  • top/htop ile süreç bazlı kullanım.
  • systemd-cgtop ile cgroup/slice bazında anlık kaynak görünümü.
  • cpu.stat (v2) ve cpuacct.usage (v1) ile gerçek tüketim.
    cat /sys/fs/cgroup/tenantA/cpu.stat
    

9) En İyi Uygulamalar ve Tuzaklar

  • Önce ağırlık, sonra kota: CPUWeight ile adil paylaşımı kurun; ancak runaway proseslerde CPUQuota ile üst sınır koyun.
  • IO ve bellekle birlikte düşünün: CPU’yı kıstığınız uygulama IO-bound ise etki sınırlı kalır. io.weight ve memory.max ile bütünsel politika uygulayın.
  • Pinleme ölçülü olsun: AllowedCPUs ile pinleme, cache locality’yi iyileştirir; fakat dar boğaz yaratabilir.
  • Gözlem & otomatizasyon: Limitleri Optimizasyon Hizmeti kapsamında metriklere göre ayarlayın; cron/Ansible ile sürdürün.

10) HostLigo ile Ölçeklenebilir Kaynak Politikaları

Uygulama başına CPU sınırları, yoğun trafik dalgalarında istikrar sağlar. İş yüklerinizi dikey/yatay ölçeklemek için HostLigo’nun Sunucu Barındırma, VDS ve yüksek çekirdek/li Premium VDS seçeneklerinden yararlanabilir, yönetilen Linux Hosting paketleriyle operasyon yükünü azaltabilirsiniz.

Sonuç

cpulimit, hızlı ve pratik tekil süreç sınırlamaları için idealdir; ancak kurumsal ölçekte tutarlı bir kaynak yönetimi için cgroups v2 + systemd yaklaşımı önerilir. Kota (cpu.max/CPUQuota) ile tavanı, ağırlık (cpu.weight/CPUWeight) ile adaleti tanımlayın; izleme ve otomasyonla sürekli iyileştirin. Performans ve süreklilik hedeflerinizi güvenle karşılamak için altyapınızı HostLigo ekosistemiyle planlayın.

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Benzer Yazılar