节点版本是 v0.11.13
崩溃期间的内存使用情况根据sudo top不提高3%
重现此错误的代码:
var request = require('request')
var nodedump = require('nodedump')
request.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2",function(err,res)
{
var data
console.log( "Data received." );
data = JSON.parse(res.body)
console.log( "Data parsed." );
data = nodedump.dump(data)
console.log( "Data dumped." );
console.log( data )
})
Run Code Online (Sandbox Code Playgroud)
要检查递归堆栈大小问题是否已使用--stack-size = 60000参数运行下一个代码
var depth = 0;
(function recurse() {
// log at every 500 calls
(++depth % 500) || console.log(depth);
recurse();
})();
Run Code Online (Sandbox Code Playgroud)
并且有
264500
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
然后我运行了代码,它给了我致命的错误:CALL_AND_RETRY_LAST分配失败 - 使用相同的--stack-size = 60000参数处理内存不足但没有得到Segmentation fault.
所以我总结CALL_AND_RETRY_LAST一下,递归堆栈大小并不常见. …
嗯......我回到原点.我无法想象我的生活.
我收到以下错误:
FATAL ERROR: JS Allocation failed - process out of memory
Run Code Online (Sandbox Code Playgroud)
我可以列举几十个(是的,几十个)我试图找到这个问题根源的东西,但实际上它太过分了.以下是关键点:
我的假设是(因为第二点),泄漏可能不是原因; 相反,似乎可能有一个非常大的SINGLE对象.以下线程支持这个理论:: 在Node.js中使用JSON.stringify导致'进程内存不足'错误
我真正需要的是一些方法来找出应用程序崩溃时内存的状态,或者可能是导致FATAL ERROR的堆栈跟踪.
基于我上面的假设,一个10分钟的堆转储是不够的(因为该对象不会驻留在内存中).
node.js ×2