节点版本为 v0.11.13
v0.11.13
崩溃期间的内存使用情况sudo top未超出3%
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 ) })
要检查是否存在递归堆栈大小问题,我使用–stack-size = 60000参数运行了下一个代码
var depth = 0; (function recurse() { // log at every 500 calls (++depth % 500) || console.log(depth); recurse(); })();
并得到了
264500 Segmentation fault
然后,我运行了导致严重错误的代码:CALL_AND_RETRY_LAST分配失败-使用相同的–stack-size = 60000参数处理内存不足,并且没有得到Segmentation fault。
Segmentation fault
因此,我得出结论CALL_AND_RETRY_LAST与递归堆栈大小没有共同之处。
CALL_AND_RETRY_LAST
我该如何解决这个问题?我相信计算机上有足够的可用内存来成功完成此任务。
关于stackoverflow也有类似的问题,但是这些问题都不是CALL_AND_RETRY_LAST我创建单独问题的原因。
如果您查看源代码:github / v8,似乎您尝试保留一个非常大的对象。根据我的经验,如果您尝试解析一个巨大的JSON对象,则会发生这种情况,但是当我尝试使用JSON和node0.11.13,一切正常。
您不需要更多--stack-size,您需要更多的内存:--max_new_space_size和/或--max_old_space_size。
--stack-size
--max_new_space_size
--max_old_space_size
我唯一能给您的提示是尝试另一个JSON解析器和/或尝试将输入格式更改为JSON行而不是仅JSON。