Merhaba arkadaşlar, bugün sizlere sunucu yönetiminde en kritik konulardan biri olan bellek yönetimini, özellikle de "Memory Pressure" (Bellek Baskısı) kavramını ve Swap kullanımını nasıl doğru yorumlayacağımızı anlatacağım. Sunucunuz yavaşladığında ilk bakılan şey genellikle bellektir ama sadece boş bellek (free memory) miktarına bakmak sizi yanıltabilir. Bu rehberle, gerçek bellek baskısını nasıl ölçeceğinizi ve Swap'in ne zaman bir uyarı sinyali olduğunu öğreneceksiniz.
Bellek Baskısı (Memory Pressure) Nedir?
Bellek baskısı, sistemin fiziksel belleği (RAM) tükenmeye başladığında ve daha agresif bellek temizleme mekanizmalarını (cache temizleme, swap-out) devreye sokmak zorunda kaldığı durumu ifade eder. Yüksek bellek baskısı, disk I/O artışına ve dolayısıyla uygulama yanıt sürelerinde ciddi artışa neden olur. Klasik `free -m` komutu bu baskıyı tam olarak göstermez.
Memory Pressure'ı Ölçme Araçları
İşte benim sunucularda sıklıkla kullandığım, durumu net gösteren araçlar:
1. vmstat: Anlık ve özet istatistikler için mükemmeldir. `si` (swap-in) ve `so` (swap-out) sütunlarına bakın.
2. sar: Sistem aktivite raporu ile geçmişe dönük analiz yapabilirsiniz.
3. /proc/meminfo: En detaylı bilgi bu dosyadadır. Özellikle `MemAvailable` satırı çok değerlidir.
Kritik Göstergeler ve Anlamları
Swap Kullanımı: Swap kullanımı tek başına kötü değildir. Asıl kritik olan, sürekli ve yüksek miktarda Swap-In/Swap-Out aktivitesidir. Bu, sistemin sürekli olarak belleği disk ile takas yaptığını, yani ciddi bir RAM yetersizliği yaşadığını gösterir.
Available Memory (/proc/meminfo): `MemFree`'den daha gerçekçidir. Buffers ve Cache'den ihtiyaç halinde kullanılabilecek bellek miktarını da hesaba katar. Bu değer çok düşükse (örn: toplam RAM'in %5'inden az) baskı var demektir.
Page Faults (vmstat'te 'pf'): Özellikle major faults, diskten sayfa okumak gerektiğinde oluşur ve yüksek performans düşüşünün işaretidir.
Alarm Durumları ve Çözüm Önerileri
Şu durumlarda acil müdahale gerekir:
1. Sürekli yüksek `si` (swap-in) ve `so` (swap-out) değerleri.
2. `MemAvailable` değerinin sürekli sıfıra yakın olması.
3. Disk I/O (`wa` değeri vmstat'te) ve CPU sistem zamanı (`sy`) yüksekliği ile birlikte görülen yüksek sayfa hataları.
Hemen yapılacaklar:
`top` veya `htop` ile bellek tüketen süreçleri bulun.
Gereksiz servisleri kapatın.
Uygulama bellek limitlerini (Java heap, PHP-FPM pm.max_children gibi) gözden geçirin.
Kısa vadede Swap alanını geçici olarak artırmak bir çözüm olabilir (ama asıl sorunu çözmez):
Özet ve En İyi Pratikler
Bellek yönetiminde sadece "ne kadar swap kullanılıyor"a değil, baskının sürekliliğine ve yoğunluğuna bakın. `vmstat` ile `si/so` aktivitesini, `/proc/meminfo` ile `MemAvailable` değerini takip edin. Proaktif izleme için bu metrikleri bir monitoring aracına (Prometheus, NetData) bağlamanızı şiddetle tavsiye ederim.
Umarım bu rehber faydalı olmuştur. Siz bellek baskısı ve swap kullanımını izlerken hangi araçları ve metrikleri kullanıyorsunuz? Benim atladığım önemli bir nokta var mı? Tecrübelerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin. Sağlıcakla kalın.
Bellek baskısı, sistemin fiziksel belleği (RAM) tükenmeye başladığında ve daha agresif bellek temizleme mekanizmalarını (cache temizleme, swap-out) devreye sokmak zorunda kaldığı durumu ifade eder. Yüksek bellek baskısı, disk I/O artışına ve dolayısıyla uygulama yanıt sürelerinde ciddi artışa neden olur. Klasik `free -m` komutu bu baskıyı tam olarak göstermez.
İşte benim sunucularda sıklıkla kullandığım, durumu net gösteren araçlar:
1. vmstat: Anlık ve özet istatistikler için mükemmeldir. `si` (swap-in) ve `so` (swap-out) sütunlarına bakın.
Bash:
vmstat 1 5
2. sar: Sistem aktivite raporu ile geçmişe dönük analiz yapabilirsiniz.
Bash:
sar -r 1 5
3. /proc/meminfo: En detaylı bilgi bu dosyadadır. Özellikle `MemAvailable` satırı çok değerlidir.
Bash:
grep -E "MemTotal|MemFree|MemAvailable|SwapCached|SwapTotal|SwapFree" /proc/meminfo
Swap Kullanımı: Swap kullanımı tek başına kötü değildir. Asıl kritik olan, sürekli ve yüksek miktarda Swap-In/Swap-Out aktivitesidir. Bu, sistemin sürekli olarak belleği disk ile takas yaptığını, yani ciddi bir RAM yetersizliği yaşadığını gösterir.
Available Memory (/proc/meminfo): `MemFree`'den daha gerçekçidir. Buffers ve Cache'den ihtiyaç halinde kullanılabilecek bellek miktarını da hesaba katar. Bu değer çok düşükse (örn: toplam RAM'in %5'inden az) baskı var demektir.
Page Faults (vmstat'te 'pf'): Özellikle major faults, diskten sayfa okumak gerektiğinde oluşur ve yüksek performans düşüşünün işaretidir.
Şu durumlarda acil müdahale gerekir:
1. Sürekli yüksek `si` (swap-in) ve `so` (swap-out) değerleri.
2. `MemAvailable` değerinin sürekli sıfıra yakın olması.
3. Disk I/O (`wa` değeri vmstat'te) ve CPU sistem zamanı (`sy`) yüksekliği ile birlikte görülen yüksek sayfa hataları.
Hemen yapılacaklar:
`top` veya `htop` ile bellek tüketen süreçleri bulun.
Gereksiz servisleri kapatın.
Uygulama bellek limitlerini (Java heap, PHP-FPM pm.max_children gibi) gözden geçirin.
Kısa vadede Swap alanını geçici olarak artırmak bir çözüm olabilir (ama asıl sorunu çözmez):
Bash:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Bellek yönetiminde sadece "ne kadar swap kullanılıyor"a değil, baskının sürekliliğine ve yoğunluğuna bakın. `vmstat` ile `si/so` aktivitesini, `/proc/meminfo` ile `MemAvailable` değerini takip edin. Proaktif izleme için bu metrikleri bir monitoring aracına (Prometheus, NetData) bağlamanızı şiddetle tavsiye ederim.
Umarım bu rehber faydalı olmuştur. Siz bellek baskısı ve swap kullanımını izlerken hangi araçları ve metrikleri kullanıyorsunuz? Benim atladığım önemli bir nokta var mı? Tecrübelerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin. Sağlıcakla kalın.