节点版本为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 -size=60000参数的进程内存不足,并且没有得到Segmentation fault
。
因此,我得出结论,CALL_AND_RETRY_LAST
与递归堆栈大小没有任何共同之处。
我该如何解决这个问题呢?我相信我的计算机上有足够的空闲内存来成功完成这项任务。
在stackoverflow上也有类似的问题,但这些问题都不是关于CALL_AND_RETRY_LAST
的,这就是为什么我创建了单独的问题。
发布于 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。
发布于 2016-02-26 19:22:31
要解决此问题,您需要通过使用选项--max_old_space_size
增加内存限制来运行应用程序。默认情况下,Node.js的内存限制为512MB。
node --max_old_space_size=2000 server.js
发布于 2016-05-13 02:21:56
我发现在Node4.1.1中max_new_space_size
不是一个选项,单独使用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 === 4 4GB内存,如果您的设备内存不足,您可能希望选择较小的内存。
更新:在运行grunt时也发现了这个错误,之前是这样运行的:
./node_modules/.bin/grunt
将命令更新为以下命令后,它不再有内存错误:
node --max_old_space_size=2048 ./node_modules/.bin/grunt
https://stackoverflow.com/questions/26094420
复制相似问题