首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >致命错误: CALL_AND_RETRY_LAST分配失败-进程内存不足

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

Stack Overflow用户
提问于 2014-09-29 15:17:05
回答 10查看 222.4K关注 0票数 202

节点版本为v0.11.13

崩溃期间的内存使用量根据sudo top不会在3%上引发

重现此错误的代码:

代码语言:javascript
复制
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参数运行了下一段代码

代码语言:javascript
复制
var depth = 0;

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

并得到了

代码语言:javascript
复制
264500 
Segmentation fault

然后我运行代码,它给出了致命的错误:堆栈分配失败-- CALL_AND_RETRY_LAST -size=60000参数的进程内存不足,并且没有得到Segmentation fault

因此,我得出结论,CALL_AND_RETRY_LAST与递归堆栈大小没有任何共同之处。

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

在stackoverflow上也有类似的问题,但这些问题都不是关于CALL_AND_RETRY_LAST的,这就是为什么我创建了单独的问题。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2014-09-29 15:40:38

如果你看一下源代码:github/v8,似乎你试图保留一个非常大的object.According给我的经验如果你试图解析一个巨大的JSON对象,但当我尝试用JSON和node0.11.13解析你的输出时,它工作得很好。

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

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

票数 124
EN

Stack Overflow用户

发布于 2016-02-26 19:22:31

要解决此问题,您需要通过使用选项--max_old_space_size增加内存限制来运行应用程序。默认情况下,Node.js的内存限制为512MB。

代码语言:javascript
复制
node --max_old_space_size=2000  server.js 
票数 47
EN

Stack Overflow用户

发布于 2016-05-13 02:21:56

我发现在Node4.1.1中max_new_space_size不是一个选项,单独使用max_old_space_size并不能解决我的问题。我将以下内容添加到我的shebang中,并且这些内容的组合似乎可以工作:

代码语言:javascript
复制
#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096

编辑: 4096 === 4 4GB内存,如果您的设备内存不足,您可能希望选择较小的内存。

更新:在运行grunt时也发现了这个错误,之前是这样运行的:

代码语言:javascript
复制
./node_modules/.bin/grunt

将命令更新为以下命令后,它不再有内存错误:

代码语言:javascript
复制
node --max_old_space_size=2048 ./node_modules/.bin/grunt 
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26094420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档