METEOR / FATAL ERROR:CALL_AND_RETRY_2分配失败 - 处理内存不足

时间:2014-10-31 05:48:29

标签: meteor meteorite

我在流星0.9.2.2和陨石0.9.2上工作。 我正在尝试运行我现有的流星应用程序,但是, 长时间坚持我有一个问题 "确定要使用的最佳软件包版本。这可能需要一些时间。"

最后得到以下错误:

  

致命错误:CALL_AND_RETRY_2分配失败 - 处理完毕   存储器

/usr/local/lib/node_modules/meteorite/lib/command.js:41
throw "Command exited with " + code + "/" + signal;
^
Command exited with null/SIGABRT

我想知道是否有办法解决此错误?

运行meteor update时的内存是什么样的:

memory screenshot

2 个答案:

答案 0 :(得分:1)

流星在使用内存方面非常沉重。特别是在安装包及其依赖项时。

作为一般经验法则,请确保您拥有至少1GB的RAM。如果你有512mb,你可能会遇到这样的问题。

这是Meteor的一个已知问题,没有其他解决方法:https://github.com/meteor/meteor/issues/2475

另一个选择是增加交换大小。

答案 1 :(得分:0)

我正在添加这个,因为我遇到了类似的问题,我只是设法在流星1.4.3.1下解决它。

背景:

问题在于meteor调用节点进行构建。当它运行时,节点为其运行的V8引擎分配一定量的内存。在较大的项目中,为V8分配的默认内存不足以跟踪所有内容 - 它在接近极限时尝试进行垃圾收集,但最终耗尽空间并因显示的错误而崩溃。

如果我们只是直接运行节点,我们可以使用--max-old-space-size选项运行它,这将允许我们设置V8引擎的最大内存。问题是meteor在自己的上下文中调用节点并使用自己的选项,因此我们不能直接将标志添加到我们的流星调用中。

解决方案:

看来meteor 1.4.3.1(以及其他人)会在调用节点时传递TOOL_NODE_FLAGS环境变量中指定的标志和选项(其他人提到NODE_OPTIONS,但它不适用于我的流星版本 - 标志只是被丢弃了)

因此,如果要将节点引擎的最大内存增加到4 GB,请添加一个环境变量:

TOOL_NODE_FLAGS="--max-old-space-size=4096" 

到运行meteor的上下文中 - 然后该选项应该传递给节点调用。

(如果您不知道在哪里设置环境变量 - 它通常会在您的IDE构建配置或构建脚本中。如果您想要理智地检查该选项是否实际被读取,请尝试将其更改为乱码 - 它应该导致流星抛出错误)