我有一些长时间运行的节点代码,会在一段时间后打印出[RangeError: Maximum call stack size exceeded]
错误并继续无限期地执行此操作。
要追踪导致这种情况的递归调用(我无法找到任何递归,我没有使用setTimeout
或process.nextTick
),我这样做了:
process.on('uncaughtException', function(error) {
console.log(error);
console.log(error.stack);
});
这捕获了错误,但stack
属性为undefined
!我尝试抛出自己的错误,stack
属性显示预期的堆栈。节点不应该在堆栈溢出错误中有stack
吗?如何确定哪些调用导致此问题?
答案 0 :(得分:0)
您不必在JavaScript中抛出Error
对象。这甚至可以是一个字符串。因此,当您的应用崩溃时,您无法依赖stack
属性。
根据您的描述,您的应用中存在内存泄漏,您应该尝试查找。网上有很多教程。还有一个模块可以在https://www.npmjs.com/package/memwatch上找到名为memwatch
的泄漏。