Javascript 如何更改Heroku nodejs工作进程以避免内存泄漏?

Javascript 如何更改Heroku nodejs工作进程以避免内存泄漏?,javascript,node.js,heroku,memory-leaks,Javascript,Node.js,Heroku,Memory Leaks,以下是Heroku上的一个节点js工作程序: var Worker = require('./worker.js') ... Worker.performJob(data) //data is a small object with just 3 attributes worker.js: var Worker = {} Worker.performJob = function (data) { //read lots of data into memory, call other fun

以下是Heroku上的一个节点js工作程序:

var Worker = require('./worker.js')
...
Worker.performJob(data) //data is a small object with just 3 attributes
worker.js:

var Worker = {}
Worker.performJob = function (data) {
  //read lots of data into memory, call other functions with this data as parameters
  var hugeData = readFromDb()
  Worker.processStuff(hugeData)
}

Worker.processStuff = function (hugeData) {
  ...
}

module.exports = Worker
工作人员一遍又一遍地侦听一些事件并开始处理数据。 随着时间的推移,worker使用的内存会增加——即使所有的大变量都是局部变量,它也不会在performJob()完成时释放。 本文提示这可能是因为Worker全局变量,因为它保留了对函数的引用

员工应如何书写以避免这种情况

更新 我通过在同一个.js文件中移动函数来更改worker。现在是

performJob(data)

function performJob(data) {
  //read lots of data into memory, call other functions with this data as parameters
  var hugeData = readFromDb()
  processStuff(hugeData)
}

function processStuff(hugeData) {
  ...
}

尽管如此,内存在执行每个任务后都会增长,在空闲时会保持该级别(如所示),然后在另一个任务后再次增长…

内存的增长是因为您保留了对对象的引用。readFromDB是否同步?也许问题就在那里?还有,你怎么称呼这个工人?你只是在每次新的数据推送中产生一个新的工作人员吗?谢谢Zlatko。readFromDB是异步的,这样写是为了可读性。我原以为在processStuff()完成后hugeData数组将被释放,但这似乎仍然存在。worker启动一次,然后侦听事件并调用performJob(),那么,对db的调用中可能存在悬空引用吗?