İçeriğe geç

Sorun gidermeYavaş sunucular

Yüksek CPU veya bellek kullanımı: nedeni bulun ve çözün

Yavaş bir sunucuyu teşhis edin: yük ortalamasını, steal time ve G/Ç beklemesini okuyun, CPU ve RAM tüketen süreçleri bulun, OOM'u çözün, swap ekleyin.

  • Orta
  • 15 dk okuma
  • Güncellendi

Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13, Windows Server 2022, Windows Server 2025

Bu sayfada
  1. Başlamadan önce
  2. 1. adım: Genel tabloyu görün
  3. 2. adım: Süreçleri bulun
  4. 3. adım: Belleği ve swap kullanımını kontrol edin
  5. 4. adım: Bellek sorunlarını çözün
  6. Bir servisin belleğini sınırlayın
  7. Bir swap dosyası ekleyin
  8. 5. adım: Sınır plan olduğunda
  9. Windows Server
  10. Sorun giderme
  11. Sonraki adımlar

Yavaş bir sunucu her zaman bir şeyle meşguldür: hesaplama yapar, diski bekler, bellek takas eder ya da hipervizörü bekler. Bu rehber hangisi olduğunu görmeyi, arkasındaki süreci bulmayı ve sorunu çözmeyi gösterir. Komutlar Ubuntu ve Debian içindir; ardından bir Windows bölümü gelir.

Başlamadan önce

  • SSH ile ya da sunucu SSH için fazla yavaşsa web konsoluyla giriş yapın.
  • Yavaşlığın ne zaman olduğunu not edin. Her gece 03:00'te görülen bir sorun zamanlanmış bir işi, yoğun saatlerdeki bir sorun trafiği işaret eder.

1. adım: Genel tabloyu görün

Bash
uptime
nproc
top
  • Yük ortalaması (uptime; 1, 5 ve 15 dakika için üç sayı): nproc ile karşılaştırın. CPU sayısının altında olması iyidir; uzun süre çok üzerinde olması görevlerin beklediğini gösterir.
  • top içindeki CPU satırı zamanın nereye gittiğini gösterir: us kullanıcı programları, sy çekirdek, wa disk bekleme, st steal time. CPU'ya göre sıralamak için P, belleğe göre sıralamak için M tuşuna basın; q çıkar.

Deseni okuyun:

GördüğünüzOlası nedenGidilecek adım
Yüksek us, en üstte tek bir süreçYoğun bir uygulama veya kontrolden çıkmış bir süreç2. adım
Yüksek waDiske bağlı iş: veritabanı, yedekler, swap3. adım
Yüksek stAna makine yoğun; planınızın payı yetmiyor5. adım
Az boş bellek, swap kullanımda, süreçler sonlandırılıyorBellek baskısı3. adım

2. adım: Süreçleri bulun

Bash
ps -eo pid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 15
ps -eo pid,user,%cpu,%mem,rss,cmd --sort=-%mem | head -n 15

Bir servis için kendi kaynak kullanımına ve kayıtlarına bakın:

Bash
systemctl status nginx
sudo journalctl -u nginx --since "30 minutes ago"

Tipik çözümler:

  • Yük altındaki bir web uygulaması: önbellekleme, belleğe sığacak şekilde daha az PHP-FPM işçisi, yavaş sorgular için veritabanı indeksleri.
  • Takılmış bir iş: servisi sudo systemctl restart ve servis adıyla yeniden başlatın, ardından neden takıldığını araştırın.
  • Yanlış saatte çalışan zamanlanmış iş: yedekleri veya raporları sakin saatlere taşıyın (crontab -l, systemctl list-timers).
  • Sizin başlatmadığınız bilinmeyen bir süreç: yalnızca sonlandırmayın. Bkz. sunucunuz ele geçirildiyse yapmanız gerekenler.

3. adım: Belleği ve swap kullanımını kontrol edin

Bash
free -h
vmstat 1 10

free -h çıktısında available sütunu programların hâlâ kullanabileceği miktardır; free değerinin düşük olması normaldir, çünkü Linux boştaki belleği önbellek olarak kullanır. vmstat çıktısında sıfırdan farklı si ve so sütunları sunucunun aktif olarak swap kullandığını gösterir; bu her şeyi yavaşlatır.

Çekirdeğin süreç sonlandırmak zorunda kalıp kalmadığını kontrol edin:

Bash
sudo journalctl -k | grep -i -E 'out of memory|oom-kill'

Pressure stall information, görevlerin bellek veya G/Ç için ne kadar beklediğini gösterir (çekirdeğinizde PSI etkinse):

Bash
cat /proc/pressure/memory
cat /proc/pressure/io

4. adım: Bellek sorunlarını çözün

Bir servisin belleğini sınırlayın

systemd bir servisi sınırlayabilir; böylece servis tüm sunucuyu ele geçiremez:

Bash
sudo systemctl set-property myapp.service MemoryMax=1G

myapp.service yerine birim adını yazın. Servis sınırı aştığında yalnızca o etkilenir.

Bir swap dosyası ekleyin

Swap belleğin yerini tutmaz, ama sunucuya süreçleri sonlandırmak yerine kısa zirveler için alan sağlar. ext4 üzerinde:

Bash
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Doğrulama: swapon --show /swapfile dosyasını listeler ve free -h swap'ı gösterir. Btrfs'te swap dosyası özel hazırlık gerektirir; önce dosya sisteminizi df -T / ile kontrol edin.

5. adım: Sınır plan olduğunda

Uygulamalarınız ayarlı olduğu halde sunucu normal yükte CPU veya belleği tüketiyorsa ya da steal time yoğun saatlerinizde yüksek kalıyorsa iş yükü planı aşmıştır. Daha büyük bir plana veya seriye geçin: hizmeti yükseltin veya düşürün ve VPS, VDS ve dedicated sunucu.

Windows Server

  • Task Manager (Ctrl + Shift + Esc) › Processes ve Performance; Resource Monitor (resmon) her süreç için CPU, bellek, disk ve ağı gösterir.
  • PowerShell'de en çok tüketenleri listeleyin:
PowerShell
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU, WorkingSet
Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 2 -MaxSamples 5
  • Düşük bellek uyarıları (kaynak tükenmesi olayları) için Event Viewer › Windows Logs › System bölümüne bakın.
  • Windows Update ve Defender taramaları yeniden başlatmalardan sonra kısa zirvelere neden olur; sürekli yük genellikle bir uygulamadan veya SQL Server'dan gelir.

Sorun giderme

top yüksek yük ama düşük CPU kullanımı gösteriyor. Görevler diskleri bekliyor (wa) ya da kesintisiz G/Ç'de takılı. iostat -x 1 5 (paket sysstat) ile ve diskin dolu olup olmadığına bakarak kontrol edin: disk dolu.

Sunucu yoğun saatlerde erişilemez oluyor. Bellek bitiyor ve OOM mekanizması önemli servisleri durduruyor. Servisleri sınırlayın, swap ekleyin veya daha büyük bir plana geçin.

Yük her gece yüksek. Yedekler, kayıt döndürme veya güncellemeler o saatte çalışıyor. Bunları zamana yayın.

Sonraki adımlar

Sık sorulan sorular

Normal bir yük ortalaması nedir?

nproc ile gördüğünüz CPU sayısıyla karşılaştırın. Bu sayının altındaki bir yük ortalaması CPU'ların yetiştiğini gösterir; uzun süre bunun çok üzerinde kalan değerler görevlerin CPU'yu veya diski beklediği anlamına gelir.

Yüksek steal time ne anlama gelir?

top içindeki st değeri, ana makine diğer makinelere hizmet verirken sanal CPU'nuzun beklediği süredir. Kısa sıçramalar normaldir; yoğun saatlerinizde yüksek kalan steal time, iş yükünüzün VDS veya dedicated sunucu gibi ayrılmış kaynaklara ihtiyaç duyduğunu gösterir.

Süreçlerim neden aniden sonlandırılıyor?

Bellek bittiğinde çekirdeğin bellek yetersizliği (OOM) mekanizması bir süreci durdurur. journalctl -k, sonlandırılan süreçle birlikte Out of memory mesajlarını gösterir. Bellek kullanımını azaltın, servisi sınırlayın, swap ekleyin veya daha büyük bir plana geçin.

Boş belleğin sıfıra yakın olması sorun mu?

Tek başına değil. Linux boştaki belleği önbellek olarak kullanır ve programlar ihtiyaç duyduğunda geri verir. Bunun yerine free -h çıktısındaki available sütununa bakın.

Yüksek CPU kötü amaçlı yazılım olabilir mi?

Evet. Tüm CPU'yu kullanan, çoğu zaman rastgele adlı, bilinmeyen bir süreç bir sızmadan sonra çalışan bir kripto madencisi olabilir. Süreci yalnızca sonlandırmak yerine ele geçirilmiş sunucular rehberimizi izleyin.

Kaynaklar

Şifre Oluştur

Lütfen onaylayın