Ich habe Express auf node.js auf einem Heroku-Server für ein einfaches Projekt verwendet. Als ich begann, ein neues Relikt zu verwenden, um den Speicher zu überwachen, bemerkte ich ein langsames Speicherleckmuster. Ich entfernte den gesamten Code, den ich entwickelte und alle anderen Knotenmodule und verließ nur sich selbst und neue Reliquiemodule. Ich beobachte immer noch das Speicherleck. Ich frage mich, ob dies Express.js Speicherverlust ist. Hat Express.js auf Node.js einen Speicherverlust?
Hier ist der gesamte Code links:
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'));
});
Und 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: Jetzt wachsenden Speicher sogar Heroku der Grenze 512 MB kostenlos Ebenen übergeben. Müllsammlung scheint nicht zu funktionieren.
Was Sie gezeigt haben, ist zunehmende Speichernutzung, die nicht unbedingt ein Leck. Sie müssen testen, was passiert, wenn das System unter Speicherdruck steht. 350 MB (der oberste Punkt in Ihrem Diagramm) ist nicht viel Speicherverbrauch auf modernen Systemen; V8 hat sich vielleicht (noch) nicht darum gekümmert, eine Speicherbereinigung durchzuführen. –
Mein ursprünglicher Code bestand aus ein paar hundert HTTP-Anfragen, und die Speicherauslastung stieg auf 1,5 GB. Kannst du mir bitte ein einfaches Beispiel geben und das Speicherlimit, dass ich V8 machen kann, GC machen? – user3211198
Der einfachste Weg ist wahrscheinlich, weniger Speicher zu geben. Ich bin sicher, Heroku gibt dir die Kontrolle darüber. –