yandex metrika
Linux Sunucuda RAM Neden Dolar? 8 GB RAM'im Nereye Gitti? - Tecrübe Güncesi
Genel

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.

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

Linux RAM kullanım grafiği - used, buff/cache ve available dağılımı

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

sunucu RAM optimizasyonu - before and after karşılaştırma grafiği

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:

DDoS veya bot saldırısı

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.

Türkay

Teknoloji, bilgisayar güvenliği, WordPress ve yapay zeka konularında içerik üreten Tecrübe Güncesi'nin editörü. Linux sistem yönetimi, ağ güvenliği ve web geliştirme alanlarında yılların getirdiği tecrübeye sahip. 2015'ten bu yana Türkçe teknoloji içerikleri üreterek okuyuculara yol göstermeyi hedefliyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Başa dön tuşu