Articles of 堆栈溢出

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了很多。 谢谢。