Hetzner Cloud üzerinde barınan ve Coolify ile yönetilen sunucumda son zamanlarda ciddi yavaşlamalar, SSH bağlantısında takılmalar ve Coolify panelinin kilitlenmesi gibi sorunlar yaşamaya başladım.
Bu yazıda; sorunu nokta atışı nasıl tespit ettiğimi, disk ve RAM testlerini nasıl yorumladığımı ve Coolify üzerinde Docker konteynerlerini doğru şekilde nasıl limitleyerek sunucuyu kurtardığımı adım adım anlatacağım.
## 1. Sorunun Tespiti: “Sunucu Neden Kasıyor?”
Sunucuya terminalden bağlandığımda bile harflerin ekrana geç düştüğünü fark ettim. Genellikle üç şüpheli vardır: **CPU, RAM veya Disk.**
### Adım 1: Kaynak Tüketimi (htop)
İlk olarak `htop` ile anlık duruma baktım:
`htop`
* **Gözlem:** İşlemci yükü (Load Average) `0.25` civarındaydı, yani CPU darboğazı yoktu.
* **Sorun:** RAM kullanımı sınıra dayanmamıştı ancak **SWAP (Sanal Bellek)** kullanımı yüksekti. Sistem, RAM’de yer açmak için verileri diske yazmaya başlamıştı (Swap in/out). Bu işlem, NVMe disk bile olsa RAM’e göre çok yavaş olduğu için sistemi kilitliyordu.
### Adım 2: Disk Performans Testi (I/O)
Hetzner disklerinde fiziksel bir yavaşlık olup olmadığını test etmek için şu komutu kullandım:
`dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct`
* **Sonuç:** `1.1 GB/s` yazma hızı.
* **Yorum:** Disk performansı mükemmel. Sorun donanımda değil, yazılımın kaynak yönetiminde.
### Adım 3: Suçluyu Bulmak (Docker Stats)
Coolify kullandığım için hangi uygulamanın kaynakları sömürdüğünü bulmak adına Docker istatistiklerine baktım:
`docker stats –no-stream –format “table {{.Name}}\t{{.MemPerc}}\t{{.MemUsage}}”`
**Tespit:**
Kendi geliştirdiğim bir “Face Swap” (AI/Python) uygulamasının tek başına **~2 GB RAM** tükettiğini gördüm. Uygulama ani yüklenmelerde (spike) RAM’i dolduruyor, sunucu da yer açmak için Coolify panelinin servislerini Swap’e (diske) atıyordu. Paneldeki yavaşlığın sebebi buydu.
—
## 2. Çözüm: Coolify ile Kaynak Limitleme (Resource Limits)
Uygulamanın sunucunun tamamını (8GB RAM) işgal etmesini engellemek için ona bir sınır çizmem gerekiyordu. Coolify panelinde **Project > Settings > Resource Limits** kısmına gittim.
Ancak burada bazı Docker hatalarıyla karşılaştım. İşte doğru yapılandırma mantığı:
### Karşılaşılan Hatalar
**Hata 1:** `Minimum memory limit allowed is 6MB`
* **Hatalı Giriş:** `2300`
* **Sebep:** Birim yazmadığım için Docker bunu 2300 Bayt sandı.
* **Çözüm:** Sonuna mutlaka **MB** eklenmeli (`2300MB`).
**Hata 2:** `Minimum memoryswap limit should be larger than memory limit`
* **Hatalı Giriş:** Memory: `2300MB`, Swap: `1024MB`
* **Sebep:** Docker’da Swap Limiti kutusuna sadece “ekstra swap miktarını” değil, **(RAM + SWAP)** toplamını yazmak gerekiyor.
### Uygulanan İdeal Ayarlar (Çözüm)
Sunucuyu rahatlatan ve hatasız çalışan yapılandırma şu şekilde oldu:
* **Limit CPUs:** `1.5`
* *Uygulama sunucunun tüm çekirdeklerini sömüremesin, 1.5 çekirdek ona yetsin.*
* **CPU Weight:** `1024`
* **Maximum Memory Limit:** `2300MB`
* *Uygulamaya ayrılan tavan RAM miktarı.*
* **Maximum Swap Limit:** `3324MB`
* *Hesaplama:* `2300 MB` (RAM) + `1024 MB` (İstediğim Swap) = **3324 MB**.
—
## 3. Sonuç
Ayarları kaydedip **Deploy** ettikten sonra terminalden tekrar kontrol ettim:
`docker stats –no-stream –format “table {{.Name}}\t{{.MemUsage}}\t{{.MemUsage}}”`
* **Öncesi:** `LIMIT: 7.57GiB` (Sunucunun tamamına erişebiliyordu)
* **Sonrası:** `LIMIT: 2.24GiB` (Artık kafeslendi!)
Artık bu uygulama bellek sızıntısı yapsa bile sadece kendisi yeniden başlıyor (restart), sunucunun geri kalanı ve Coolify paneli stabil çalışmaya devam ediyor.