Ho utilizzato express su node.js in esecuzione su un server heroku per un progetto semplice. Quando ho iniziato a utilizzare la nuova reliquia per monitorare la memoria, ho notato un lento pattern di perdita di memoria. Ho rimosso tutto il codice che ho sviluppato e tutti gli altri moduli del nodo e ho lasciato solo esprimere se stesso e nuovi moduli relic. Osservo ancora la perdita di memoria. Mi chiedevo se si tratta di perdita di memoria express.js. Express.js su Node.js presenta una perdita di memoria?
Qui è tutto il codice a sinistra:
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'));
});
E 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: Ora cresce memoria anche superato 512MB limite di Heroku per livelli liberi. La raccolta dei dati inutili non sembra funzionare.
Quello che hai mostrato è in aumento l'utilizzo della memoria, non necessariamente una perdita. È necessario testare cosa succede quando il sistema viene messo sotto pressione di memoria. 350 MB (il punto più alto nel grafico) non è un grande uso di memoria nei sistemi moderni; V8 potrebbe non essersi preso la briga di fare qualsiasi raccolta dei rifiuti (ancora). –
Il mio codice originale stava facendo un paio di centinaia di richieste http e stava consumando la memoria fino a 1,5 GB. Puoi per favore darmi un semplice esempio e il limite di memoria che posso fare con V8 per fare GC? – user3211198
Il modo più semplice è probabilmente quello di dargli meno memoria. Sono sicuro che Heroku ti dà il controllo su questo. –