VDS (Sanal Özel Sunucu) kiralayan geliştiriciler, zaman içinde uygulamalarının giderek daha yavaşlaştığını, bazen hiç yanıt vermediğini veya çöktüğünü gözlemlerler. Sunucunun RAM'i yeterli olmasına rağmen, sanki her geçen gün daha fazla bellek kullanılıyormuş gibi görünür. Bu durum çoğu zaman bellek sızıntısı (memory leak) olarak adlandırılan ve production ortamında ciddi hasara yol açan bir sorundur. Bu makalede bellek sızıntısını VDS'de nasıl tespit edip çözeceğinizi adım adım öğreneceksiniz.
Bellek Sızıntısı Nedir ve Neden Oluşur?
Bellek sızıntısı, bir uygulamanın dinamik olarak tahsis ettiği belleği (allocate) düzgün şekilde geri vermemesi (deallocate) durumudur. Örneğin Node.js, Python, Java veya PHP tabanlı uygulamalar çalışırken her istek için yeni nesneler yaratır; bu nesneler işlem bitince silinmelidir. Ancak kodu yazarken unutulan referanslar veya hatalı değişken kapsamları nedeniyle nesneler bellekte kalabilir.
Bellek sızıntısının yaygın nedenleri:
- Global değişkenlere yanlışlıkla veri ekleme (özellikle cache amacıyla)
- Event listener'ları kapatmamak veya kaldırmamak
- Closure'lar içinde büyük objeler referans tutmak
- Veritabanı bağlantılarını kapatmamak
- Timer ve interval'ları temizlememek (setInterval, setTimeout)
- Hatalı circular reference'lar
VDS'de Bellek Kullanımını İzleme
Bellek sızıntısını tespit etmek için önce sunucunuzda anlık bellek durumunu görmeniz gerekir. VDS'de SSH bağlantısı açıp şu komutları çalıştırabilirsiniz:
free -h – Toplam, kullanılan ve boş belleği gösterir. Eğer "used" değeri gün geçtikçe artıyorsa sorun var demektir.
top veya htop – Çalışan süreçleri ve bellek tüketimlerini canlı olarak izleyebilirsiniz. VIRT ve RES sütunlarına bakın: VIRT toplam sanal bellek, RES fiziksel bellektir.
ps aux --sort=-%mem – Bellek tüketen en fazla 10 süreci gösterir. Uygulamanızın PID'sini bulun.
Uygulamanızın bellek kullanımını zaman içinde takip etmek için bir script yazabilirsiniz:
watch -n 5 'ps -p [PID] -o pid,vsz,rss,comm=' – 5 saniyede bir belirtilen PID'nin belleğini gösterir.
Node.js Uygulamalarında Bellek Sızıntısı Bulma
Node.js tabanlı uygulamanız varsa, bellek profili almak için built-in inspector'ı kullanabilirsiniz:
node --inspect app.js – Uygulamayı başlayıp Chrome DevTools (chrome://inspect) aracılığıyla bağlanabilirsiniz. Memory sekmesinde heap snapshot alıp, kalan nesneleri analiz edebilirsiniz.
Daha pratik bir yol clinic.js kütüphanesidir:
npm install -g clinicclinic doctor -- node app.js
Bu komut çalışan uygulamayı izler, bir süre sonra durdurup web tabanlı rapor sunar. Memory bloat hemen görülür.
Python ve PHP'de Bellek İzleme
Python uygulamaları için memory_profiler ve tracemalloc kütüphanelerini kullanabilirsiniz:
pip install memory-profilerpython -m memory_profiler app.py
Bu, hangi satırda kaç MB bellek kullanıldığını gösterir.
PHP için memory_get_usage() ve memory_get_peak_usage() fonksiyonları vardır. Kodun kritik noktalarına ekleyin:
error_log('Memory: ' . memory_get_usage(true) / 1024 / 1024 . 'MB');
Ayrıca VPS'de PHP-FPM kullanıyorsanız, worker başına max_children limiti ayarlayıp, bir worker'ın aşırı bellek tüketince otomatik yeniden başlamasını sağlayabilirsiniz (pm.max_requests).
Bellek Sızıntısını Gidermek
Sızıntıyı bulduktan sonra kaynağını tespit edin. Yaygın çözümler:
- Global değişken yerine local scope kullanın
- Artık kullanılmayan event listener'ları kaldırın:
emitter.removeListener('event', handler) - Cache'lere TTL (time-to-live) ekleyin veya size limiti koyun
- Büyük dosyaları stream ile okuyun, bellekte yüklemeyin
- Closure'ları mümkün olduğunca kısa tutun
- Veritabanı bağlantı pool'unu düzgün yapılandırın
VDS'de Uygulama Restartını Otomatikleştirin
Geçici bir çözüm olarak, bellek sızıntısı çözülene kadar uygulamayı periyodik olarak restart edebilirsiniz. PM2 process manager kullanıyorsanız:
pm2 start app.js --max-memory-restart 512M
Bu, uygulama 512MB'yi aştığında otomatik olarak yeniden başlar. Sunucunuza kalıcı çözüm olmaması için geçici bir yardımcıdır.
Bellek sızıntıları VDS performansının belki de en sinsi düşmanıdır. Zamanında yakalanmadığında swap kullanımı başlar, disk I/O artar ve tüm sistem donup kalabilir. Düzenli izleme ve proaktif debug, bu sorundan kurtulmanın anahtarıdır. Bogahost'un VDS paketleri bol bellek sunarken, sızıntıyı çözmek kodunuza bağlıdır—çünkü kaynak ne kadar olsa, verimli kullanılmadığında yetersiz hale gelir.
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yap