为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉莫斯之舞 2019-10-06 14:08:22
节点版本为 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我创建单独问题的原因。
查看完整描述

4 回答

?
达令说

TA贡献1821条经验 获得超6个赞

如果您查看源代码github / v8,似乎您尝试保留一个非常大的对象。根据我的经验,如果您尝试解析一个巨大的JSON对象,就会发生这种情况,但是当我尝试使用JSON和node0.11.13,一切正常。


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


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


查看完整回答
反对 回复 2019-10-06
?
千巷猫影

TA贡献1829条经验 获得超7个赞

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


node --max_old_space_size=2000  server.js 


查看完整回答
反对 回复 2019-10-06
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

我发现这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 


查看完整回答
反对 回复 2019-10-06
  • 4 回答
  • 0 关注
  • 1533 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信