节点版本号为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的,这就是为什么我创建了单独的问题。


当前回答

increase-memory-limit模块现在已弃用。 从2017年8月发布的Node.js v8.0开始,我们现在可以使用NODE_OPTIONS env变量全局设置max_old_space_size。

export NODE_OPTIONS=--max_old_space_size=4096

参考网址:https://github.com/endel/increase-memory-limit

其他回答

注意:请参阅评论中的警告,了解这将如何影响Electron应用程序。

在2017年8月发布的v8.0版本中,NODE_OPTIONS环境变量公开了这个配置(参见NODE_OPTIONS已经登陆8.x!)根据这篇文章,只允许源代码中白名单中的选项(注意:不是最新链接!),其中包括“——max_old_space_size”。注意,本文的标题似乎有点误导人——似乎NODE_OPTIONS已经存在,但我不确定它是否公开了这个选项。

所以我输入。bashrc: 出口NODE_OPTIONS =——max_old_space_size = 4096

我在这个问题上浪费了一些日子....直到我发现我在某个文件中导入了一个静态文件,一个构建文件。它使构建永远不会结束。喜欢的东西:

import PropTypes from "../static/build/prop-types"; 

固定到真正的来源解决了所有的问题。

分享我的解决方案。:)

在Windows机器中运行以下命令

设置NODE_OPTIONS =——max_old_space_size = 4096

如果你看一下源代码:github/v8,似乎你试图保留一个非常大的对象。根据我的经验,如果您试图解析一个巨大的JSON对象,就会发生这种情况,但当我尝试用JSON和node0.11.13解析输出时,它就可以正常工作。

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

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

increase-memory-limit模块现在已弃用。 从2017年8月发布的Node.js v8.0开始,我们现在可以使用NODE_OPTIONS env变量全局设置max_old_space_size。

export NODE_OPTIONS=--max_old_space_size=4096

参考网址:https://github.com/endel/increase-memory-limit