我在express.js应用程序中发现了内存使用量的奇怪增加,经过大量调查后发现问题是在使用可写流写入文件时引起的。
为了隔离问题,我创建了这个简单的应用程序:
var express = require('express');
var http = require('http');
var path = require('path');
var fs = require('fs');
var app = express();
app.set('port', process.env.PORT || 3000);
var writable = fs.createWriteStream('/tmp/stream', {flags: 'a'});
var i = 1;
app.get('/', function (req, res) {
i = i + 1;
writable.write(i + '\n');
res.end();
});
app.get('/flush', function (req, res) {
writable.end();
res.end();
});
http.createServer(app).listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'));
});
在使用基准测试工具启动多个请求并分析与“顶部”一起使用的内存后,我发现它已经增长并且从未发布。
完成请求后对刷新路由的调用也不会释放内存。
这是内存泄漏还是我做错了什么?
我用节点0.8.6,0.10.37和0.12.7进行了测试,结果相同。