node.js运行时间过长导致内存泄漏

node.js运行时间过长导致内存泄漏,node.js,Node.js,我是一个纯粹的nodejs newbi 我现在写了一个scirpt巫婆正在解析一个网站。 现在每59秒进行一次分析。 但是我注意到有一个内存泄漏 也许有人能告诉我记忆障碍是什么引起的。 是的,我知道这不是地球上最美的东西:啊 request = require('request'); cheerio = require('cheerio'); mysql= require('mysql'); var connection = mysql.createConnection({ host

我是一个纯粹的nodejs newbi

我现在写了一个scirpt巫婆正在解析一个网站。 现在每59秒进行一次分析。 但是我注意到有一个内存泄漏

也许有人能告诉我记忆障碍是什么引起的。 是的,我知道这不是地球上最美的东西:啊

request = require('request');
cheerio = require('cheerio');
mysql= require('mysql');

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'mysqluser',
  password : 'notforpublic',
  database : 'myschema'
});

var notifydegree= 50;
var masterurl = 'https://schnaeppchenfuchs.com/forum?page=';
var pagecount= 7;
var surl  = [];
var degree = [];
var thread= [];
var pic = [];

function doSchnaeppchen(callback) {
for ( var count=0; count <= pagecount; count++) {
  url=masterurl+count;
  console.log(new Date().toString() + 'URL:' + url);
  request(url, function(err, resp, body){
  $ = cheerio.load(body);
  links = $('.threads-list__item-header'); //use your CSS selector here
  product = $('.threads-list__item-rating');
  picture = $('.threads-list__item-logo-padding');
  title = $('.threads-list__item-title');
  $(links).each(function(i, link){
    surl.push($(link).attr('href'));
 })
  $(product).each(function(i, product){
    degree.push($(product).attr('data-rating-value'));
    thread.push($(product).attr('data-thread-id'));  
  })
 $(picture).each(function(i, picture){
    // Get Picture Source
    pic.push($(picture).children().attr('src'));
  })
if ( surl.length == degree.length && surl.length == thread.length && surl.length == pic.length)
{
  for (var i = 0; i < surl.length; i++)
 {
   if ( degree[i] < notifydegree ) {
   var merge = { Thread_Id : thread[i], URL : surl[i], PIC_URL : pic[i], Degree: degree[i] , NEED_MSG: false , BROADCAST_DONE: false };
    //console.log( 'Thread_ID: ['+ thread[i] + '] has now ['  + degree[i] +'] degree, no NOTIFY needed');
   }
   else 
   {  var merge = { Thread_Id : thread[i], URL : surl[i], PIC_URL : pic[i], Degree: degree[i] , NEED_MSG: true , BROADCAST_DONE: false }; 
    //console.log( 'Thread_ID: ['+ thread[i] + '] has now ['  + degree[i] +'] degree, Notify Needed');
   }
    connection.query('INSERT INTO Forum SET ? ON DUPLICATE KEY UPDATE Thread_id =VALUES(Thread_id), NEED_MSG=VALUES(NEED_MSG), Degree=VALUES(Degree) ', merge , function(err,res){
     if(!err) {
     }
     else 
      {  console.log('ERROR '); }
   });

 }
}
else 
{  console.log ('Arrays have not the Same Size, ABORT ');}
});
}
callback();
}

function wait60sec(){
    console.log(new Date().toString() + 'WAIT 60 SEC');
    setTimeout(function(){
        doSchnaeppchen(wait60sec);
    }, 59000);
}

doSchnaeppchen(wait60sec);
request=require('request');
cheerio=需要(“cheerio”);
mysql=require('mysql');
var connection=mysql.createConnection({
主机:“localhost”,
用户:“mysqluser”,
密码:“notforpublic”,
数据库:“myschema”
});
var值=50;
var masterurl=https://schnaeppchenfuchs.com/forum?page=';
var pagecount=7;
var-surl=[];
var度=[];
var线程=[];
var pic=[];
函数doSchnaeppchen(回调){

对于(var count=0;count First off,大多数时候人们认为他们有内存泄漏,但这并不是真正的泄漏-更多的时候,这只是内存使用效率低下造成了内存使用高峰。实际的内存泄漏测试包括在前后捕获堆快照,并检查两者之间的差异。我建议您执行some阅读关于自己诊断的方法,从这类文章开始,谷歌上还有很多其他文章。另外,请解释你是如何“知道”的你有一个内存泄漏。你到底观察到了什么?在我看来,你的代码更像是在试图同时运行N个web请求,如果N是一个很高的数字,你只会使用大量的内存,而这些内存不会泄漏,但会产生高峰值内存使用率。相反,你可能应该编写代码,以便它能够管理一些小问题而不是立即尝试同时启动所有请求。