You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions构建报JavaScript堆内存不足,本地修复方案无效

Node.js堆内存不足:Github Actions构建失败排查与解决

问题描述

构建库文件时频繁遇到内存不足错误,本地通过执行命令export NODE_OPTIONS="--max-old-space-size=8192"可解决该问题,但在Github Actions的workflow中,无论如何增大--max-old-space-size的值,构建特定组件时仍会失败,抛出以下错误日志:

<--- Last few GCs --->

[3238:0x62dbb30]   103974 ms: Scavenge (reduce) 2038.5 (2082.4) -> 2038.3 (2083.4) MB, 4.0 / 0.0 ms  (average mu = 0.080, current mu = 0.002) allocation failure 
[3238:0x62dbb30]   105675 ms: Mark-sweep (reduce) 2039.2 (2083.4) -> 2036.6 (2083.1) MB, 1697.7 / 0.0 ms  (average mu = 0.054, current mu = 0.014) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0xa89e60 node::Abort() [node]
 2: 0x9ade29 node::FatalError(char const*, char const*) [node]
 3: 0xc7583e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
 4: 0xc75bb7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
 5: 0xe3f6d5  [node]
 6: 0xe4027c  [node]
 7: 0xe4dc0b v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
 8: 0xe5190c v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
 9: 0xe157da v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [node]
10: 0x116d4ab v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [node]
11: 0x15045f9  [node]
Aborted (core dumped)

当前使用的workflow文件build.yml内容如下:

name: Build

on:
  push:
    tags: 
      - "v*"

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [15.x]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: export NODE_OPTIONS="--max-old-space-size=16384" # tried to increase it more but all fails
      - run: npm run build

问题根源

Github Actions中每个run步骤都是独立的shell进程,前一个步骤里通过export设置的环境变量不会被后续步骤继承,因此单独的export NODE_OPTIONS步骤对后续的npm run build没有生效,构建时依然使用Node.js默认的内存限制。

解决方案

以下几种方法可以解决这个问题:

方法1:将环境变量设置与构建命令放在同一个run步骤

通过多行命令的方式,让环境变量和构建命令在同一个shell进程中执行:

- run: |
    export NODE_OPTIONS="--max-old-space-size=16384"
    npm run build

方法2:通过workflow的env字段全局或局部设置环境变量

可以在job级别设置环境变量,作用于整个job的所有步骤:

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      NODE_OPTIONS: "--max-old-space-size=16384"
    strategy:
      matrix:
        node-version: [15.x]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm run build

也可以仅在构建步骤设置环境变量:

- run: npm run build
  env:
    NODE_OPTIONS: "--max-old-space-size=16384"

方法3:直接在npm构建脚本中指定内存限制

修改项目根目录下的package.json,在build脚本中直接添加Node.js内存参数:

"scripts": {
  "build": "node --max-old-space-size=16384 ./path-to-your-build-script.js"
}

内容的提问来源于stack exchange,提问作者Sheikhah Maasher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:25:27