2015-02-15 19 views
5

pm2 start ... ile sunucumu çalıştırıyordum ve pm2 monit bana 2 saat sonra 3GB memory gösteriyordu. Bu yüzden memwatch ekledim, şimdi 2 saat daha bekledim ve tekrar pm2 monit tarafından gösterilen bellek 3GB'a ulaştı.Node.JS bellek sızıntısı PM2 ile

Bu nedenle, oluşturulan günlükleri denetledim.

{ before: { nodes: 75659, size_bytes: 11141702, size: '10.63 mb' }, 
    after: { nodes: 73226, size_bytes: 10840598, size: '10.34 mb' }, 
    change: 
    { size_bytes: -301104, 
    size: '-294.05 kb', 
    freed_nodes: 5141, 
    allocated_nodes: 2708, 

Ve başka: bana gösterdi O pm2 monit büyük bellek sızıntısı gösterdi oluşturulan günlükleri eminim böylece

{ before: { nodes: 72591, size_bytes: 10728318, size: '10.23 mb' }, 
    after: { nodes: 73284, size_bytes: 10798062, size: '10.3 mb' }, 
    change: 
    { size_bytes: 69744, 
    size: '68.11 kb', 
    freed_nodes: 5931, 
    allocated_nodes: 6620, 

Şimdi gerçekten karıştı, bu son kayıtları.

Neden memwatch neden 10MB+ bellek ve 3GB+ gösteren pm2 monit gösteriyor?


Şimdi kaçak devam edip etmediğini öğrenmek için forever veya monit gibi bir şey geçiş.


Biraz daha fazla arka plan

  • ben profil ve sızıntıyı bulmak için uğraşıyorlar ve profillerinde sadece herhangi bir sızıntı gösteren yoktur.
  • Bir müşteri bağlandığında ve istemci bağlantı kesildiğinde fark alındığında, memwatch farklılığı başlatılır.
+0

Bu konuda, son 2 gündür onu izlemeye çalışıyordum ve sadece bulamıyorum. Bu yüzden sonunda inanılmaz, devasa hafıza ve performans farkı olan Golang'a geçmeye karar verdim. Çok verimli. Sonunda kafa karıştırıcı sızıntı yok. Artı kodlama oldukça kolay, javascript bir günden daha az bir sürede golang için. – majidarif

cevap

3
  • Ben de aynı sorunla karşı karşıya, ama sonra biraz araştırma ı PM2 kullanırken nodejs çöp toplayıcı çağıran olmadığını gördük. '- maruz-gc'

    geçici iş sorunu PM2 düzeltmelerle kullanarak, kuvvet çağrı çöp toplayıcı kadar Yani, app.js --node-args = başlatmak PM2

aşağıdaki

  • Yukarıdaki argüman --expose-gc çağrı çöp toplayıcısını node js'den zorlamamıza izin verecek, şimdi güç garajı için aşağıdaki kodu kullanın.

    if (global.gc) { 
        global.gc(); 
    } else { 
        console.log('Garbage collection unavailable. use --expose-gc ' 
        + 'when launching node to enable forced garbage collection.'); 
    } 
    

    Bu, PM2 meomry sızıntısı sorununu çözecektir.

  • +4

    Kaynak sağlayabilir misiniz ama küçük araştırmalardan sonra nodejs'nin pm2.' kullanırken çöp toplayıcısını aramadığını buldum. Teşekkürler. – majidarif