gpt4 book ai didi

node.js - 这是内存泄漏吗?

转载 作者:搜寻专家 更新时间:2023-10-31 23:55:38 24 4
gpt4 key购买 nike

我的代码正在泄漏内存。几个小时后,它会填满整个内存并崩溃。我在这里简化了我的代码,有人能判断这看起来是否泄漏了吗?谢谢。

var request = require('request').forever(), // as per [1]
async = require('async'),
kue = require('kue'),
jobs = kue.createQueue(),
pool = { maxSockets: 1 };



function main (job, done) {
async.series(
[function (callback) {
var req = request({url: job.data.URL1, pool: pool}, function (err, resp, body) {
//stuff...
callback(err);
});
},
function (callback) {
var req = request({url: job.data.URL2}, function (err, resp, body) {
//stuff...
callback(err);
});
}
],
function (err) {
//stuff...
done();
}
);

}

jobs.process('job_name', function (job, done) { //many jobs with 'job_name' in the queue
main (job, done);
});

[1] https://groups.google.com/d/msg/nodejs/ZI6WnDgwwV0/sFm4QKK7ODEJ

最佳答案

我不认为你的代码是罪魁祸首。我在使用 kue 时遇到了同样的问题,为了确保我没有做错任何事,我做了一个像这样的 super 简单的 worker:

var Redis       = require('redis'),
kue = require('kue'),
config = require("../../config/local.js"),
redisClient = Redis.createClient(config.redis),
jobs = kue.createQueue({ redis : config.redis });

jobs.process('testjobs', function processJob(job, done, error) {
console.log(job.data, error);
done();
});

运行这段代码让我意识到泄漏的是 kue。解决方法是使用 pm2 ,如果内存快用完了,这家伙会运行你的程序并重新启动它,我正在使用 JSON App Declaration在重新启动进程之前配置允许的最大内存量。

{
"apps" : [
{
"name": "test_worker",
"script": "test.js",
"instances": 1,
"max_restarts": 10,
"max_memory_restart" : "10M",
"ignore_watch": [
"[\\/\\\\]\\./",
"node_modules"
],
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork_mode"
}
]
}

希望这对您有所帮助。

关于node.js - 这是内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14710208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com