严重错误:CALL_AND_RETRY_LAST分配失败-内存不足

节点版本为 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

然后,我运行了导致严重错误的代码:CALL_AND_RETRY_LAST分配失败-使用相同的--stack-size = 60000参数处理内存不足,并且没有得到Segmentation fault。


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


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


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


拉莫斯之舞
浏览 1477回答 4
4回答

达令说

如果您查看源代码github / v8,似乎您尝试保留一个非常大的对象。根据我的经验,如果您尝试解析一个巨大的JSON对象,就会发生这种情况,但是当我尝试使用JSON和node0.11.13,一切正常。您不需要更多--stack-size,您需要更多的内存:--max_new_space_size和/或--max_old_space_size。我可以给您的唯一提示是尝试另一个JSON解析器和/或尝试将输入格式更改为JSON行而不是仅JSON。

千巷猫影

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

慕田峪7331174

我发现这max_new_space_size不是节点4.1.1中的选项,max_old_space_size仅靠它并不能解决我的问题。我将以下内容添加到我的shebang中,并且这些方法的组合似乎有效:#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096[编辑]:4096 === 4GB的内存,如果您的设备内存不足,则可能需要选择较小的容量。[更新]:运行grunt时还发现了此错误,该错误以前是这样运行的:./node_modules/.bin/grunt将命令更新为以下命令后,它不再出现内存错误:node --max_old_space_size=2048 ./node_modules/.bin/grunt 
打开App,查看更多内容
随时随地看视频慕课网APP