Javascript nodeJS中简单api web服务中的内存泄漏
上面的文件server.js只是启动web服务器。它使用下面包含的文件downloader.js。downloader.js只是并行地向返回JSON响应的url发出10或20个并行web请求。运行此进程半天后,该进程的内存使用量将达到1.5GB。这段代码有内存泄漏吗Javascript nodeJS中简单api web服务中的内存泄漏,javascript,node.js,memory-leaks,Javascript,Node.js,Memory Leaks,上面的文件server.js只是启动web服务器。它使用下面包含的文件downloader.js。downloader.js只是并行地向返回JSON响应的url发出10或20个并行web请求。运行此进程半天后,该进程的内存使用量将达到1.5GB。这段代码有内存泄漏吗 var url = require('url'); var http = require('http'); var downloader = require("./downloader"); http.createServer(
var url = require('url');
var http = require('http');
var downloader = require("./downloader");
http.createServer(onRequest).listen(8080);
function onRequest(request,response)
{
if(request.method=='POST')
handlePost(request,response);
else
handleGet(request,response);
}
function handlePost(request,response)
{
var data = '';
request.on('data',function(chunk){
data+=chunk.toString();
});
request.on('end',downloadTrainStatus);
function downloadTrainStatus()
{
var downloadPromise = downloader.download(data);
downloadPromise.then(function (responses) {
var total = responses.length;
var result = [];
for( var i = 0 ; i < total ; i++)
result.push(JSON.parse(responses[i][1]));
response.writeHead(200);
response.write(JSON.stringify(result));
response.end();
}, function (err) {
console.log(err);
var result = { status : "error" };
response.writeHead(200);
response.write(JSON.stringify(result));
response.end();
})
}
}
function handleGet(request,response)
{
console.log("GET request");
response.writeHead(200);
response.write("Get request works !!");
response.end();
}
您是否尝试过避免关闭?只有当继续长时间运行程序导致内存使用率稳步上升时,才会出现内存泄漏。最初的高内存使用率并不意味着它正在泄漏。您必须看到内存使用率随着时间的推移不断上升,才能知道您有漏洞。@jfriend00是的,代码几乎每天运行1/2。随着时间的推移,消耗的内存量会增加。
var Promise = require('bluebird')
var request = Promise.promisify(require('request'))
function download(json)
{
var requests = []
var data = JSON.parse(json);
for(var i = 0; i< data.total ; i++)
{
var stationCode = stations[i].StationCode;
var journeyDay = stations[i].JourneyDayCode;
requests.push(downloadStatus());
}
return Promise.all(requests);
}
function downloadStatus()
{
var url = "http://google.com";
var headers = {'User-Agent' : 'Apache-HttpClient/UNAVAILABLE (java 1.4)'};
var options = {
url: url ,
headers: headers,
timeout: 15 * 1000
}
return request(options);
}
module.exports.download = download;