gpt4 book ai didi

Node.js http请求内存和cpu hog

转载 作者:搜寻专家 更新时间:2023-11-01 00:34:26 24 4
gpt4 key购买 nike

我有一个持续请求页面的 node.js 脚本,有点像 cron 作业。

但是,几分钟后,Node 开始使用大量 CPU(高达 70%)和内存(高达 200mb)。

我的脚本有什么问题?

function cron(path)
{
var http = require('http');
var site = http.createClient(443, 'www.website.com', true);
var request = site.request('GET', path, {'host': 'www.website.com'});
request.end();

request.on('response', function (response) {

setTimeout(function(){cron(path)},15000);
});


}

cron('/path/to/page');

最佳答案

request.on('response', function (response) {
setTimeout(function(){cron(path)},15000);
});

对于每个响应,您都会创建一个新的 cron 作业。记录您的回复。如果您从请求中获得的数量超过 1,那么您将以指数方式创建更多的 cron 作业。

您使用对 path 的引用创建了一个 function() {}。所以整个范围的状态都被保留了下来。你想通过添加这个来释放内存:

var site = null;
var request = null;

您在函数内调用 require("http") 而不是在模块范围外。您只需获取 http 一次,然后将其放在模块范围内文件的顶部。

var http = require('http');
var site = http.createClient(443, 'www.website.com', true);
function cron(path)
{

var request = site.request('GET', path, {'host': 'www.website.com'});
request.end();

var once = true;
request.on('response', doIt);

function doIt(response) {
if (!once) {
once = null;
doIt = function() {};
setTimeout(function(){cron(path)},15000);
}
});

site = null;
request = null;
}

cron('/path/to/page');

关于Node.js http请求内存和cpu hog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677318/

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