Meteor构建运行我们的记忆

时间:2017-02-07 07:53:45

标签: node.js meteor

我正在尝试构建我的流星应用程序并且不断遇到以下错误。这不是我第一次构建应用程序,一切正常,直到昨天构建。我已经尝试过了:正如[SO SO] [1]中的一个回答中所建议的那样,但它并没有帮助。

#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096

控制台输出:

meteor build .

WARNING: The output directory is under your source tree.
         Your generated files may get interpreted as source code!
         Consider building into a different directory instead
         meteor build ../output

   Minifying app code                        \
<--- Last few GCs --->

  103230 ms: Mark-sweep 1385.5 (1455.5) -> 1387.9 (1455.5) MB, 898.4 / 0 ms [allocation failure] [GC in old space requested].
  104206 ms: Mark-sweep 1387.9 (1455.5) -> 1387.9 (1455.5) MB, 975.8 / 0 ms [allocation failure] [GC in old space requested].
  105196 ms: Mark-sweep 1387.9 (1455.5) -> 1384.1 (1455.5) MB, 990.2 / 0 ms [last resort gc].
  106101 ms: Mark-sweep 1384.1 (1455.5) -> 1385.1 (1455.5) MB, 905.3 / 0 ms [last resort gc].


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x249f6fdb4629 <JS Object>
    1: /* anonymous */(aka /* anonymous */) [0x249f6fd041b9 <undefined>:~4943] [pc=0xcd10dd2f48c] (this=0x249f6fd041b9 <undefined>,self=0x1400b413881 <an AST_ObjectKeyVal with map 0xc3d3a4651b9>,output=0x17417c4edd79 <an Object with map 0x16588927e021>)
    2: doit(aka doit) [0x249f6fd041b9 <undefined>:4190] [pc=0xcd10d7a3298] (this=0x249f6fd041b9 <undefined>)
    3: print [0x249f6fd041b9 <unde...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Aborted (core dumped)

2 个答案:

答案 0 :(得分:4)

同样的问题让我疯狂,但我终于设法在流星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构建配置或构建脚本中。如果您想要理智,请检查--max-old ...选项实际上正在阅读,尝试将其改为乱码 - 它应该导致流星抛出错误)

答案 1 :(得分:0)

你需要注意那个初始警告:

WARNING: The output directory is under your source tree.
         Your generated files may get interpreted as source code!
         Consider building into a different directory instead
         meteor build ../output

阅读它所说的内容 - 基本上它将生成文件,然后再编译它们。难怪它陷入困境并耗尽内存。将构建放在一个不同的目录中(不在Meteor项目中),它应该更加快乐:)