Linux Sistemlerde Swap Alanını Etkin Kullanma Teknikleri
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
- 2) cpulimit ile Hızlı Başlangıç
- Örnek Kullanımlar
- 3) cgroups v1 vs v2: Temeller ve Farklar
- 4) cgroups v2 ile CPU Kota (cpu.max) ve Ağırlık (cpu.weight)
- Elle (geçici) cgroup oluşturma
- 5) systemd ile Kalıcı CPU Politikaları
- Örnek: Nginx’i %40 ile sınırla
- Slice bazlı sınır (çoklu servis için)
- 6) cgroups v1’de CPU Kota (cpu.cfs_quota_us) Kısa Not
- 7) Kapsayıcılar (Docker/Podman) ve Kubernetes
- 8) İzleme ve Doğrulama
- 9) En İyi Uygulamalar ve Tuzaklar
- 10) HostLigo ile Ölçeklenebilir Kaynak Politikaları
- Sonuç
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.weightgibi 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.max— kota 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.