Middle+
Bellek sızıntıları olursa nasıl başa çıkıyorsunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bellek sızıntılarını tespit etmek ve gidermek için aşağıdaki yöntemleri kullanıyorum:
- İzleme: Node.js'in yerleşik araçları olan
--expose-gc,process.memoryUsage()veya PM2 veya Prometheus/Grafana gibi harici araçlar kullanarak bellek tüketimini düzenli olarak izliyorum. - Profil araçları:
- Heap Anlık Görüntüleri: Chrome DevTools (veya V8 protokolünü destekleyen herhangi bir hata ayıklayıcı) kullanarak farklı zamanlarda "heap anlık görüntüleri" alıyorum ve bunları karşılaştırıyorum, böylece zamanla büyüyen ve olması gerekmeyen nesneleri tespit ediyorum.
// Heapdump kullanarak heap anlık görüntüsü oluşturma örneği const heapdump = require('heapdump'); // ... kodunuz ... // Heap anlık görüntüsü oluşturma heapdump.writeSnapshot((err, filename) => { if (err) console.error(err); else console.log('Heap anlık görüntüsü kaydedildi:', filename); });- CPU Profilleme: Bazen sızıntılar doğrudan belleğe bağlı değildir, döngüsel veya aşırı CPU kullanımıyla ilgilidir, bu da dolaylı olarak bellek sorunlarına yol açabilir.
- Koda Analiz: Kodu manuel olarak gözden geçiriyorum ve yaygın sızıntı nedenlerini arıyorum:
- Olay dinleyicileri kaldırılmamış.
// Sızıntı örneği: kaldırılmamış olay dinleyicisi const EventEmitter = require('events'); const emitter = new EventEmitter(); function handler() { /* ... */ } emitter.on('myEvent', handler); // Eğer emitter devam ediyorsa ve handler referansı kaybolduysa // veya bağlı olduğu nesne yok edilmek isteniyorsa, // handler onu bellekte tutar. // Doğru: // emitter.off('myEvent', handler);- Temizlenmeyen zamanlayıcılar (
setInterval,setTimeout). - Yanlışlıkla büyük nesnelere referans tutan kapanışlar.
- Temizlenmeyen küresel değişkenler.
- Sonsuz büyüyen önbellekler, atma mekanizması olmadan.
- Unutulmuş promise'ler veya geri çağırmalar, bağlamı bellekte tutar.
- Otomatik testler: Uygulamanın uzun vadeli çalışmasını simüle eden ve bellek kullanımının istikrarını kontrol eden testler yazarım.
- Kod incelemeleri: Meslektaşlarımdan kodu potansiyel sızıntılar açısından analiz etmelerini isterim.