流星构建运行着我们的记忆

blu*_*ren 1 node.js meteor

我正在尝试构建流星应用程序,并且不断遇到以下错误。这不是我第一次构建该应用程序,并且一切正常,直到昨天构建为止。我已经尝试过:如[此SO帖子] [1]中的答案之一所建议,但这没有帮助。

#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096
Run Code Online (Sandbox Code Playgroud)

控制台输出:

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)
Run Code Online (Sandbox Code Playgroud)

小智 6

同样的问题使我发疯,但是我终于设法在流星1.4.3.1下解决了它。

背景:

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

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

解:

看来流星1.4.3.1(以及其他流星)在调用node时会传递TOOL_NODE_FLAGS环境变量中指定的标志和选项(其他人提到了NODE_OPTIONS,但不适用于我的流星版本-这些标志只是得到了掉落)

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

TOOL_NODE_FLAGS="--max-old-space-size=4096" 
Run Code Online (Sandbox Code Playgroud)

到正在运行流星的上下文中-该选项应传递给节点调用。

(如果您不知道在哪里设置环境变量,通常会在您的IDE构建配置或构建脚本中使用它。尝试将其更改为乱码-它应导致流星抛出错误)