Sobes.tech
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:

  1. İ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.
  2. 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.
  3. 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.
  4. 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.
  5. Kod incelemeleri: Meslektaşlarımdan kodu potansiyel sızıntılar açısından analiz etmelerini isterim.