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
tüm kod kaldı olduğunu. Çöp toplama çalışmıyor gibi gözüküyor.
Lasse cevap olarak
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). –
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
En basit yol muhtemelen daha az bellek vermektir. Eminim Heroku sana hakimiyet verir. –