# 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.

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

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ü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

```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](/guides/hacked-server-recovery).

## 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](/guides/upgrade-or-downgrade-service) ve [VPS, VDS ve dedicated sunucu](/guides/vps-vs-vds-vs-dedicated-server).

## 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](/guides/disk-full).

**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ı](/guides/website-502-503-504).
- Yükseltmeden önce ölçün: [VPS, VDS ve dedicated sunucu](/guides/vps-vs-vds-vs-dedicated-server).

## 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.

---

Kaynak: <https://hyperdc.com/tr/guides/troubleshooting/high-cpu-memory>\
Son güncelleme: 2026-10-09
