Linux Sunucuda RAM Neden Dolar? 8 GB RAM’im Nereye Gitti?

Sunucuma 8 GB RAM taktım. “Bu kadarı her şeye yeter” demiştim. Üç ay sonra RAM kullanımı %92’ye çıktı. “Nereye gitti bu RAM?” dedim ve araştırmaya başladım. Gördüğüm manzara beni şaşırttı — RAM’in büyük kısmı “boşa” harcanmıyordu, aslında Linux onu bilinçli bir şekilde kullanıyordu. Ama bazen gerçekten gereksiz yere doluyordu. İkisini de anlatayım.
Konu İçeriği
Linux RAM Kullanımı — Önce Yanlış Anlamayı Açalım
En yaygın yanılgı: free -h komutunda “used” değerinin yüksek olması, RAM’in tükendiği anlamına gelir. Hayır, öyle değil. Linux, boş RAM’i israf olarak görür ve hızlandırmak için disk önbelleği (page cache) olarak kullanır. Ama bir uygulama bu RAM’e ihtiyaç duyduğunda, önbellek otomatik serbest bırakılır.
Benim sunucumda free -h çıktısı şöyle:
total used free shared buff/cache available Mem: 7.8Gi 4.2Gi 0.3Gi 156Mi 3.3Gi 3.0Gi Swap: 2.0Gi 0.1Gi 1.9Gi
Dikkat: “used” 4.2 GB ama “available” 3.0 GB. Yani gerçekte kullanılabilir 3 GB daha var. “buff/cache” kısmı disk önbelleği — bu RAM gerektiğinde serbest bırakılır. Linux’in 2026 kernel belgelerine göre, available değeri, gerçek kullanıcıya sunulan kullanılabilir RAM miktarıdır (Linux Kernel Documentation, 2026).

RAM’i Gerçekten Dolduran 5 Şey
1. Veritabanı (MySQL/MariaDB)
Benim sunucumda MariaDB tek başına 2.5 GB RAM kullanıyor. Neden? Çünkü MySQL, sık erişilen verileri bellekte tutarak sorgu hızını artırıyor (innodb_buffer_pool_size). Bu ayar varsayılan olarak çok konservatif — ben 2 GB olarak ayarladım çünkü sunucumda başka şeyler de çalışıyor. Ama yoğun trafikli bir veritabanı için bu değer yükseltilmeli.
2. PHP-FPM Process’leri
Her PHP isteği bir process oluşturur ve her process 50-100 MB RAM kullanır. Benim sitemde ortalama 20 aktif process var, bu da 1-2 GB RAM demek. PHP-FPM ayarlarında pm.max_children değerini çok yüksek tutarsanız RAM bitebilir. Ben bu değeri 30 olarak ayarladım.
3. Nginx
Nginx hafiftir — genellikle 50-200 MB RAM kullanır. Ama çok fazla aktif bağlantı varsa ve her bağlantıda büyük dosyalar okunuyorsa RAM kullanımı artar. Benim sunucumda Nginx yaklaşık 150 MB kullanıyor.
4. Redis/Memcached (Veya Olması Gerekenler)
Ben Redis kullanmıyorum ama birçok WordPress sitesi object cache için Redis kullanıyor. Redis, sık kullanılan verileri bellekte tutarak veritabanı yükünü azaltır. Ama ekstra RAM gerektirir — 500 MB – 2 GB arasında.
5. Arka Plan Süreçleri
Cron job’lar, yedekleme script’leri, log processing araçları, CrowdSec agent’ı… Bunların her biri küçük miktarda RAM kullanır ama toplamda 500 MB – 1 GB’ı bulabilir. Benim sunucumda CrowdSec 50 MB, logrotate 20 MB, backup script’i çalışırken 300 MB kullanıyor.
RAM Kullanımını Optimize Etmenin 5 Yolu
1. MySQL Buffer Pool Ayarını Doğrula
Toplam RAM’in %50-70’ini MySQL’e vermek yaygın bir tavsiye ama bu sadece MySQL’e ayrılmış sunucularda geçerli. Benim gibi web + db aynı sunucuda çalışıyorsa, %25-40 daha uygun:
# /etc/mysql/my.cnf [mysqld] innodb_buffer_pool_size = 2G # 8 GB RAM'in %25'i
2. PHP-FPM Process Limitlerini Ayarla
; /etc/php/8.2/fpm/pool.d/www.conf pm = dynamic pm.max_children = 30 pm.start_servers = 5 pm.min_spare_servers = 3 pm.max_spare_servers = 10 pm.max_requests = 500
pm.max_requests = 500 çok önemli — her process 500 istekten sonra yenilenir ve olası bellek sızıntılarını önler.
3. Swap Kullanımını Optimize Et
Linux, swap’ı ne sıklıkla kullanacağını “swappiness” değerine göre belirler. Varsayılan 60 ama bir web sunucusunda 10-20 daha uygun:
sysctl vm.swappiness=10
Bu ayar, Linux’un swap’ı ancak gerçekten RAM tükendiğinde kullanmasını sağlar. Ben bu ayarı yaptıktan sonra swap kullanımım %5’in altına düştü.

4. Gereksiz Servisleri Kapatın
Ben bir noktada kullanmadığım servislere baktım ve şunları buldum:
- Postfix (e-posta sunucu) — 80 MB, kullanmıyorum → kaldırdım
- Avahi daemon (network discovery) — 20 MB, gerek yok → kaldırdım
- Birden fazla PHP versiyonu — 200 MB gereksiz → sadece 8.2 bıraktım
Toplamda 300 MB kazanmış oldum. Küçük ama birikince fark yaratıyor.
5. Bellek Sızıntısını Tespit Edin
Bir sürecin zamanla RAM’i artıyorsa bellek sızıntısı olabilir. Ben bunu tespit etmek için:
# Süreç bazlı RAM kullanımını izle ps aux --sort=-%mem | head -20
Bu komutu her saat çalıştırıp sonucu bir dosyaya yazdırarak (cron ile), zaman içinde RAM artışını gözlemleyebilirsiniz. Ben bir PHP eklentisinin günde 50 MB artan bellek sızıntısı yaptığını bu sayede tespit ettim.
RAM mi Yetmiyor, Yoksa Başka Bir Sorun mu?
Bazen RAM doluyor ama asıl sorun başka bir yerde:
| RAM Durumu | Olası Gerçek Sorun | Çözüm |
|---|---|---|
| MySQL çok RAM yiyor | Yavaş sorgular, indexesiz tablolar | Slow query log açın, index ekleyin |
| PHP-FPM process’leri çoğalıyor | Yavaş PHP kodu,_external API çağrıları | PHP profiling yapın, timeout ekleyin |
| Aniden RAM artıyor | Rate limit kurun, Cloudflare WAF açın | |
| Swap aktif, sistem yavaş | Fiziksel RAM yetersiz | Sunucu plan yükseltme |
Sıkça Sorulan Sorular
Linux RAM’i nasıl temizlerim?
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches komutu disk önbelleğini temizler. Ama bunu yapmak genellikle kötü bir fikir — Linux önbelleği bilinçli tutuyor. Zaten ihtiyaç olduğunda serbest bırakılıyor.
8 GB RAM bir web sunucusuna yeter mi?
Aylık 50.000-100.000 sayfa görüntülenmesi için evet, yeterli. Ama Redis, Elasticsearch gibi ek araçlar çalıştırıyorsanız 16 GB’a ihtiyacınız olabilir. Ben 8 GB ile 30.000 aylık görüntülenmeyi rahatça karşılıyorum.
Swap RAM yerine geçer mi?
Hayır. Swap disk tabanlıdır ve RAM’den 100-1000 kat daha yavaş. Swap, “son çare” güvenlik mekanizması olmalı, RAM uzantısı değil. Swap kullanımı sürekli %10’un üzerindeyse, fiziksel RAM eklemeniz gerekir.
Container’lar (Docker) RAM’i nasıl etkiler?
Her container kendi process’leriyle ayrı bir RAM alanı kullanır. Ben Docker kullanmıyorum ama kullanıyorsanız, her container’a limit belirlemek önemli (--memory parametresi). Limitsiz container’lar tüm RAM’i tüketebilir.
RAM yetersizliği siteyi çökertir mi?
Evet, OOM Killer (Out of Memory) devreye girer ve en çok RAM kullanan süreci öldürür. Genellikle MySQL veya PHP-FPM öldürülür — siteniz aniden çalışmayı bırakır. Ben bu yüzden swap ve izleme sistemim var.
Sonuç
Linux’ta RAM dolması çoğu zaman normal bir durum — Linux boş RAM’i verimli kullanıyor. Ama “available” değeri sürekli düşükse ve swap aktifse, optimize etme zamanı gelmiştir.
Benim sunucumda MySQL tuning, PHP-FPM limitleri, swappiness ayarı ve gereksiz servisleri temizleyerek RAM kullanımını %92’den %65’e düşürdüm. Artık 3 GB boş RAM’im var ve sistem çok daha istikrarlı çalışıyor.


