严重错误: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我创建单独问题的原因。

古一2020/03/24 09:50:48

一种替代解决方案是禁用AOT编译器:

ng build --prod --aot false
村村LEY2020/03/24 09:50:48

在Windows Machine中运行以下命令

设置NODE_OPTIONS =-max_old_space_size = 4096

达蒙Near2020/03/24 09:50:48

当分配给执行的所需内存小于正在运行的进程所需的内存时,会发生此错误。默认情况下,节点内存大小为512 mb,要增加此大小,您需要输入以下命令:

node --max-old-space-size= <NewSize> <fileName>
西里小胖小卤蛋2020/03/24 09:50:48

我花了几天时间解决这个问题....直到发现某个文件中我要导入一个静态文件,即一个内置文件。它使构建永无止境。就像是:

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

修复到真正的源可以解决所有问题。

分享我的解决方案。:)

2020/03/24 09:50:48

我在创建本地反应包时遇到了这个问题。我尝试过但不起作用的事情:

  1. 越来越node --max_old_space_size令人着迷的,这对我来说在本地有效,但在詹金斯身上却失败了,我仍然不确定詹金斯出了什么问题
  2. 提到了一些将节点版本降级到6.9.1的地方,这对我也不起作用。我只想把它放在这里,因为它可能对您有用。

对我有用的东西:我正在代码中导入一个很大的文件。我解决该问题的方法是将其包括在ignore列表中.babelrc,如下所示:

{
    "presets": ["react-native"],
    "plugins": ["transform-inline-environment-variables"],
    "ignore": ["*.json","filepathToIgnore.ext"]
}

这个.js文件实际上并不需要转译,将其添加到忽略列表确实有帮助。

阿飞米亚2020/03/24 09:50:48
npm install -g increase-memory-limit

增加内存限制

要么

  1. 导航到%appdata%-> npm文件夹或 C:\Users\{user_name}\AppData\Roaming\npm
  2. 在您喜欢的编辑器中打开ng.cmd
  3. 添加--max_old_space_size=8192IFELSE

现在,更改后的ng.cmd文件如下所示:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe" "--max_old_space_size=8192" "%~dp0\node_modules\@angular\cli\bin\ng" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node "--max_old_space_size=8192" "%~dp0\node_modules\@angular\cli\bin\ng" %*
)
GO2020/03/24 09:50:48

我曾在离子领域遇到此问题,并尝试了许多解决方案,但通过运行此解决方案。

对于MAC: node --max-old-space-size = 4096 / usr / local / bin / ionic cordova build android --prod

对于Windows: node --max-old-space-size = 4096 / Users / {您的用户} / AppData / Roaming / npm / node_modules / ionic / bin / ionic cordova构建Windows --prod

番长猴子2020/03/24 09:50:47

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

export NODE_OPTIONS=--max_old_space_size=4096

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

阿飞2020/03/24 09:50:47

我发现这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 
JinJin2020/03/24 09:50:47
$ sudo npm i -g increase-memory-limit

从项目的根目录运行:

$ increase-memory-limit

此工具将在node_modules / .bin / *文件内的所有节点调用中附加--max-old-space-size = 4096。


Node.js版本> = 8-停用通知

从NodeJs V8.0.0开始,可以使用option --max-old-space-sizeNODE_OPTIONS =选项...

$ export NODE_OPTIONS=--max_old_space_size=4096
神无2020/03/24 09:50:47

注意:请参阅注释中有关此警告可能如何影响电子应用程序的警告。

从2017年8月发布的v8.0开始,NODE_OPTIONS环境变量公开了此配置(请参阅NODE_OPTIONS已进入8.x!)。根据该文章,仅允许在源中列入白名单的选项(注意:不是最新链接!),其中包括"--max_old_space_size"请注意,本文的标题似乎有点误导-似乎已经存在NODE_OPTIONS,但我不确定它是否公开了此选项。

所以我输入.bashrc
export NODE_OPTIONS=--max_old_space_size=4096

蛋蛋2020/03/24 09:50:47

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

node --max_old_space_size=2000  server.js 
蛋蛋猿2020/03/24 09:50:47

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

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

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