Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nodeJS中简单api web服务中的内存泄漏_Javascript_Node.js_Memory Leaks - Fatal编程技术网

Javascript nodeJS中简单api web服务中的内存泄漏

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(

上面的文件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(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;