节点内存泄漏导致setInterval延迟

时间:2018-02-01 17:52:11

标签: node.js postgresql memory-leaks setinterval

我试图识别减慢数据库连接的速度。我把它缩小到可能是内存泄漏。按照this guide中的说明,我已经设置了一个堆分析功能,以便在整个程序中间隔运行。基本上是这样的:

setInterval(function(){heapingFunction()},100);  
//some code

const pgClient = new pg.Client(dbConfig);
app.listen(port, function (err) {
  if (err) {
    logger.debug(err);
  } else {
    logger.info("listening at " + port + " port");
  }
});
pgClient.connect()
.then(function (connection) {
    logger.info("database connect");
    console.log("database connect");
    return pgClient.query("query");
})
.then(function (result) {Queries})

当我运行它时,而不是以.1s为间隔的一致堆快照,我得到一个巨大的跳跃:

info: listening at 3001 port
Program is using 39904440 bytes of Heap.
Program is using 39927960 bytes of Heap.
Program is using 40055272 bytes of Heap.
Program is using 40086448 bytes of Heap.
info: database connect
database connect
Program is using 206523904 bytes of Heap.
Program is using 206546224 bytes of Heap.
Program is using 206665472 bytes of Heap.
Program is using 206874608 bytes of Heap.
Program is using 206929464 bytes of Heap.

它可以正常工作,直到info: database connect之前的堆快照。在那里,它一直停止直到DB连接(约5分钟)。正如您所看到的,它一旦恢复就会使用5倍的内存(它也会慢很多)。在此时间段内创建快照会更有用,而不仅仅是在之前和之后。这里发生了什么?内存泄漏是如此严重以致setInterval甚至无法运行?

0 个答案:

没有答案