2015-02-19 30 views
5

Basit bir proje için bir heroku sunucusunda çalışan node.js üzerinde express kullanıyorum. Hafızayı izlemek için yeni kalıntı kullanmaya başladığımda yavaş bellek sızıntısı paterni fark ettim. Geliştirdiğim tüm kodları ve diğer tüm düğüm modüllerini kaldırdım ve sadece kendini ve yeni kalıntı modüllerini ifade ettim. Hala bellek sızıntısını gözlemliyorum. Bu, express.js bellek sızıntısı olup olmadığını merak ediyordum.Node.js'de Express.js'nin bellek sızıntısı var mı?

require('newrelic'); 
var express = require('express'); 
var app = express(); 
var env = process.env.NODE_ENV || 'development'; 
if ('development' == env) { 
    app.set('port', process.env.PORT || 3000); 
} 
app.get('/', function (req, res) { 
    res.send('The server is up and running!'); 
}); 
app.listen(app.get('port'), function() { 
    console.log('Express server listening on port %d in %s mode', app.get('port'), app.get('env')); 
}); 

Ve package.json

{ 
    "name": "memleakdebug", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "express": "^4.11.2", 
    "newrelic": "^1.16.2" 
    } 
} 

UPDATE1: hatta ücretsiz sıralar için Heroku limit 512MB geçti Şimdi büyüyen bellek İşte Here is the graphic from new relic

tüm kod kaldı olduğunu. Çöp toplama çalışmıyor gibi gözüküyor.

Lasse cevap olarak

Memory keeps growing

+2

artan bellek mutlaka kullanım değil, bir sızıntı olduğunu. Sistem bellek basıncı altındayken ne olduğunu test etmeniz gerekir. 350MB (grafiğinizin en üst noktası) modern sistemlerde çok fazla bellek kullanımı değildir; V8 herhangi bir çöp toplama yapmaktan rahatsız olabilir (henüz). –

+0

Orijinal kodum birkaç yüzlerce http isteği oluşturuyordu ve bellek kullanımı 1,5GB'a kadar çıkıyordu. Bana basit bir örnek ve V8'i GC yapmak için yapabileceğim hafıza sınırını verir misiniz? – user3211198

+0

En basit yol muhtemelen daha az bellek vermektir. Eminim Heroku sana hakimiyet verir. –

cevap

10

, Yeni Relic bir bellek sızıntısı yoktur.

https://discuss.newrelic.com/t/memory-leaking-only-with-node-js-agent-installed/14448

ben tecrübe ve Aşağıdaki resimde görebileceğiniz gibi ben artık bellek sızıntısı olup New Relic ajan kaldırıldı beri

require('newrelic'); 

kaldırıldı. Eğer gösterdiğin Ne

enter image description here

+0

Güncellemesi - coleague, hiçbir problem yaşamadan Node.js + New Relic çalıştırıyor. Node.js v0.12.x çalıştırdığım ve 0.10.x çalıştırıyor olmanın tek önemli farkını bulduk. Herkes onaylayabilir mi? – Sax

+1

[New Relic Topluluğu] hakkında büyük bir tartışma vardı (https: //discuss.newrelic.com/t/node-js-agent-memory-leak/9092/27) ve onlar tarafından bir takip yazısı, bu düğüm Node Core üzerine geçerek. Bununla birlikte, bağımlılığın "1.24.x" 'e güncellenmesi, en azından ön test başına (başka hiçbir şey değişmez) çözülmüş görünüyor. [Node0.12] (https://discuss.newrelic.com/t/an-update-on-memory-management-in-node-js-perception-vs-reality/31934) sürekli olarak daha yüksek miktarda bellek kullandı. – nerdwaller

+0

Thx @nerdwaller bilmek güzel. Yeni bir deneme yaptığımda rapor edeceğim. – Sax