小编典典

致命错误:CALL_AND_RETRY_LAST 分配失败 - 进程内存不足

all

节点版本是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 )
})

为了检查是否存在递归堆栈大小问题,我使用 –stack-size=60000 参数运行了下一个代码

var depth = 0;

(function recurse() {
    // log at every 500 calls
    (++depth % 500) || console.log(depth);
    recurse();
})();

并且得到了

264500 
Segmentation fault

然后我运行了代码,它给了我 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out
of memory with the same –stack-size=60000 parameter and have not got
Segmentation fault.

所以我得出结论CALL_AND_RETRY_LAST,递归堆栈大小没有什么共同点。

我该如何解决这个问题?我相信我的计算机上有足够的可用内存来成功完成这项任务。

stackoverflow 上有类似的问题,但这些问题都不是关于CALL_AND_RETRY_LAST这就是我创建单独问题的原因。


阅读 68

收藏
2022-06-29

共1个答案

小编典典

如果您查看源:github/v8,似乎您尝试保留一个非常大的对象。根据我的经验,如果您尝试解析一个巨大的
JSON 对象,则会发生这种情况,但是当我尝试解析您的输出时JSON 和 node0.11.13,它工作得很好。

您不需要更多--stack-size,您需要更多内存:--max_new_space_size和/或--max_old_space_size.

我可以给你的唯一提示是尝试另一个 JSON 解析器和/或尝试将输入格式更改为 JSON 行而不是仅 JSON。

2022-06-29