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
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
uptime
nproc
top- Yük ortalaması (
uptime; 1, 5 ve 15 dakika için üç sayı):nprocile 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. topiçindeki CPU satırı zamanın nereye gittiğini gösterir:uskullanıcı programları,syçekirdek,wadisk bekleme,ststeal time. CPU'ya göre sıralamak içinP, belleğe göre sıralamak içinMtuşuna basın;qçıkar.
Deseni okuyun:
| Gördüğünüz | Olası neden | Gidilecek 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 wa | Diske bağlı iş: veritabanı, yedekler, swap | 3. adım |
Yüksek st | Ana makine yoğun; planınızın payı yetmiyor | 5. adım |
| Az boş bellek, swap kullanımda, süreçler sonlandırılıyor | Bellek baskısı | 3. adım |
2. adım: Süreçleri bulun
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 15Bir servis için kendi kaynak kullanımına ve kayıtlarına bakın:
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 restartve 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
free -h
vmstat 1 10free -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:
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):
cat /proc/pressure/memory
cat /proc/pressure/io4. 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:
sudo systemctl set-property myapp.service MemoryMax=1Gmyapp.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:
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/fstabDoğ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:
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
- Web sitesi yük altında hata mı veriyor? Web sitesi 502, 503 ve 504 hataları.
- Yükseltmeden önce ölçün: VPS, VDS ve dedicated sunucu.
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.