Articles of 堆栈溢出

在JavaScript中asynchronous迭代大量数组,而不会触发超出的堆栈大小

我的环境是NodeJS,尽pipe这也可能是Web相关的问题。 我有一个数据库的大量数据,我试图枚举。 然而,为了争论让我说,我有一个20000string的数组: var y = 'strstrstrstrstrstrstrstrstrstr'; var x = []; for(var i = 0; i < 20000; i++) x.push(y); 我想枚举这个列表asynchronous,可以说使用asynchronous库 ,并可以说,因为我超级谨慎,我甚至一次限制我的枚举5次迭代: var allDone = function() { console.log('done!') }; require('async').eachLimit(x, 5, function(item, cb){ … someAsyncCall(.., cb); }, allDone); 期望的是5个x的项目将在上面同时迭代,并且最终所有20,000个项目将被迭代,并且控制台将打印“完成!”。 实际发生的是: Uncaught exception: [RangeError: Maximum call stack size exceeded] 在这一点上,我认为这一定是asynchronous库的一种错误,所以我写了自己的eachLimit版本,如下所示: function eachLimit(data, limit, iterator, cb) { […]

节点错误堆栈跟踪未定义

我有一些长时间运行的节点代码,在一段时间后会打印出[RangeError: Maximum call stack size exceeded]错误,并继续无限期地执行。 要追查什么recursion调用导致这(我找不到任何recursion,我没有使用setTimeout或process.nextTick ),我做到了这一点: process.on('uncaughtException', function(error) { console.log(error); console.log(error.stack); }); 这抓住了错误,但stack属性是undefined ! 我试图抛出自己的错误, stack属性显示预期的堆栈。 节点不应该堆栈溢出错误? 我怎样才能确定哪些呼叫造成这种情况?

从node.js中的stack-overlfow api获取垃圾JSON

我正在使用stackoverflow APIsearch一个问题。 这是我的代码: app.get('/sof',function(req,res){ var ark; request("https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=relevance&q=python%20best%20practices&site=stackoverflow", function(error, response, body) { ark = body; console.log(body); res.send(ark); }); }); 但是,我在浏览器和日志中得到垃圾值bot。 我怎样才能解决这个问题? 其他一切都运行良好。 我也在用parsing器: var bodyParser = require('body-parser'); app.use(bodyParser.json()); 编辑:这里是@Wainage在解释中解释的代码。 app.get('/sof', function(req, res){ request.get({ url: "https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=relevance&q=python%20best%20practices&site=stackoverflow", gzip: true }, function(error, response, body) { console.log(body); // I'm still a string body = JSON.parse(body); // Now I'm a JSON […]

如何在node.js中debugging`RangeError:最大调用堆栈大小超出`错误

我的同事和我写了一个node.js应用程序。 我本周被指派去debugging一个问题。 问题是应用程序每隔几天就会崩溃,出现这个错误: events.js:0 (function (exports, require, module, __filename, __dirname) { // Copyright Joy ^ RangeError: Maximum call stack size exceeded 不幸的是,它不打印任何东西。 我可以使用node.js的哪些node.js方法和工具来debugging这个问题? 我们的应用程序非常庞大(它为整个校园文件查找程序提供支持),所以我们不知道这个错误发生在哪里(源代码有很多文件)。

recursion调用asynchronous函数

我有一个asynchronous函数,我想连续调用多次。 问题是,“多”可能是几十万或几百万… 显而易见的方法是从callback中调用相同的函数: function foo() { asyncBar(foo); } 当然有些逻辑是停止recursion的。 问题是堆栈是否正在填充调用,并可能导致某些点的计算器?

javascriptrecursion堆栈溢出

有没有人会解释为什么结果不同下面? // test one function computeMaxCallStackSize() { try { return computeMaxCallStackSize() + 1; } catch (e) { return 1; } } console.log(computeMaxCallStackSize()); 结果是17958 // test two function computeMaxCallStackSize() { try { return 1 + computeMaxCallStackSize(); } catch (e) { return 1; } } console.log(computeMaxCallStackSize()); 结果是15714 当函数“computeMaxCallStackSize”的位置不同时,结果也是不同的。 什么原因? 非常感谢! 运行环境: node.js v6.9.1 OS:Win7

node.js / Express在高负载下抛出'RangeError:超出最大调用堆栈大小'

我们在高负载下运行的节点环境出现了一个问题,我们无法find源。 有一点背景:我们使用Express来为http框架运行一个集群节点应用程序。 目前有3个盒子,每个盒子有8个CPU核心,每个盒子都有6个节点的工作人员。 设置似乎很好,我研究了所有build议的方法,我相信这个设置是可靠的。 我们使用Express 2.5.11和XMLHttpRequest 1.4.2运行node.js 0.8.1。 问题在于:我们正在对该产品进行“黑暗启动”testing(即浏览器客户端代码在后台调用了API ajax API,但未在页面上使用或向用户显示)。 几分钟运行成功后,系统抛出: [RangeError: Maximum call stack size exceeded] 我们通过集群控制器中的“uncaughtException”事件捕获错误(启动每个工作者),但是在该级别没有可用的堆栈跟踪。 我已经在这个问题上进行了广泛的研究,似乎无法find有类似错误的人。 在梳理系统中的每一行代码之后,下面是我所知道的: 我找不到任何recursion或循环引用。 (我读过这个错误并不总是意味着recursion问题,但是我们已经检查过;实际上我们已经通过去除大部分代码来运行testing,它仍然会发生,见下文)。 我已经下了一个工作进程每箱试图消除集群作为一个问题 – 问题仍然存在; 这个问题只发生在高负荷下。 我们的stream量是约。 每秒1500页,在交通繁忙的时候,可以达到每秒15000页(我们无法在开发环境中复制)。 发现错误的时间不同,但通常在15分钟内。 错误似乎不影响操作! 我的意思是没有腐败的反应,除了偶尔的超时之外,系统不会崩溃; 陷阱错误的工作进程恢复并在几秒钟后重新开始服务请求; 我得到了最基本的devise上的错误 – 没有额外的API被称为。 只需要一个请求,并用简单的json响应来回应。 这是最奇怪的部分。 看起来系统在我的任何代码中都没有失败 – 没有实例化任何类来做真正的工作,这是失败的。 很显然,我从更多的代码开始,但是慢慢地拿出了一些代码,直到在一个简单的设置下仍然失败。 我相信最明显的症状是错误总是在请求被完全服务之后发生。 也就是说,服务器接受请求,find正确的Express路由,调用res.send,并完成。 这真的感觉就像垃圾收集给我! 我已经读过V8引擎有一个非常好的GC引擎,但是我想知道我们的重负载影响了多less。 正如我所说,即使在基本devise上,代码也会抛出错误。 取出了我们大部分的自定义代码,这是设置的基础。 对不起,我在这里切,所以不是所有的variables声明等将被包括,但代码的工作,所有的东西都在真正的代码: 群集控制器。 这是在命令行上启动的清理版本。 cluster = require('cluster'); path […]

如何增加Node.js中的最大调用堆栈大小

这与其他有关Node中读取RangeError错误消息的其他问题是不同的:超出最大调用堆栈大小 ,我知道为什么我会收到此错误消息。 这是因为我正在recursion,实际上recursion了很多。 谢谢。