节点版本号为v0.11.13
内存使用在崩溃期间根据sudo顶部不超过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参数,并且没有分割错误。
因此,我得出结论,CALL_AND_RETRY_LAST与递归堆栈大小没有任何共同之处。
我怎么解决这个问题呢?我相信我的电脑上有足够的空闲内存来成功完成这项任务。
在stackoverflow上也有类似的问题,但这些问题都不是关于CALL_AND_RETRY_LAST的,这就是为什么我创建了单独的问题。
我发现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
只是上述答案的一个变体。
我尝试了上面的直接node命令,但没有成功,但这个Angular CLI问题的建议对我有用——你在你的包中创建一个node脚本。json文件来增加运行生产版本时Node可用的内存。
因此,如果你想将Node的可用内存增加到4gb (max-old-space-size=4096),你的Node命令将是Node——max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build——prod。(增加或减少内存数量取决于你的需要- 4gb适合我,但你可能需要更多或更少)。然后将其添加到包中。Json“脚本”部分如下所示:
"prod": "node——max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build——prod"
它将与其他可用的脚本一起包含在scripts对象中,例如:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"prod": "node --max-old-space-size=4096./node_modules/@angular/cli/bin/ng build --prod"
}
你可以通过调用npm run prod来运行它(如果你在Mac或Linux上,你可能需要运行sudo npm run prod)。
请注意,可能有一个潜在的问题导致Node需要更多的内存——如果是这种情况,这并没有解决这个问题——但它至少为Node提供了执行构建所需的内存。
当我创建一个react-native包时,我看到了这个问题。
我尝试过但没有成功的事情:
增加节点——max_old_space_size,有趣的是,这在本地为我工作,但在jenkins上失败了,我仍然不确定jenkins出了什么问题
有些地方提到将node的版本降级到6.9.1,但我也没有这样做。我只是想把这个放在这里,因为它可能对你有用。
对我有用的东西:
我在代码中导入了一个很大的文件。我解决这个问题的方法是将它包含在.babelrc的忽略列表中,就像这样:
{
"presets": ["react-native"],
"plugins": ["transform-inline-environment-variables"],
"ignore": ["*.json","filepathToIgnore.ext"]
}
它是一个.js文件,实际上不需要转译,将它添加到忽略列表确实有帮助。