FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (68)

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

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

var depth = 0;

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

而且有

264500 
Segmentation fault

然后运行给我致命错误的代码:调用_以及_重试_上次分配失败-内存中的进程具有相同的堆栈大小=60000参数,并且没有Segmentation fault

所以我得出结论CALL_AND_RETRY_LAST与递归堆栈大小无关。

我如何解决这个问题?我相信我的电脑上有足够的空闲内存来成功地完成这项任务。

在堆栈溢出中也有类似的问题,但是这些问题都不是关于CALL_AND_RETRY_LAST这就是为什么我提出了另一个问题。

提问于
用户回答回答于

如果查看来源:GitHub/V8,你试着保留一个很大的东西会接缝吗?我的经验是,如果试图解析一个巨大的JSON对象,就会发生这种情况,但是当我尝试用JSON和node0.11.13解析您的输出时,它工作得很好。

你不需要更多--stack-size,你需要更多的记忆:--max_new_space_size和/或--max_old_space_size

除此之外,我能给你的唯一提示是:尝试另一个JSON解析器和/或尝试将输入格式更改为JSON行,而不仅仅是JSON。

用户回答回答于

我发现了max_new_space_size不是节点4.1.1中的选项,而且max_old_space_size独自一人解决不了我的问题。我在我的SHEBY中加入了以下几点,这两者的结合似乎是有效的:

#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096

更新*在运行咕噜时还发现了此错误,以前是这样运行的:

./node_modules/.bin/grunt

在将命令更新到下面的命令后,它停止了内存错误:

node --max_old_space_size=2048 ./node_modules/.bin/grunt 

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励