Docker构建Vite项目内存溢出:从Heap Limit报错到完美解决的剖析

发布于:2025-06-08 ⋅ 阅读:(20) ⋅ 点赞:(0)

问题现象:诡异的"消失的index.html"

最近在CI/CD流水线中遇到诡异现象:使用Docker构建Vite项目时,dist目录中缺少关键的index.html文件,但本地构建完全正常。报错截图显示关键信息:

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

在这里插入图片描述

[Docker Image CI/cmit-docker-ci]   | <--- Last few GCs --->
[Docker Image CI/cmit-docker-ci]   | 
[Docker Image CI/cmit-docker-ci]   | [42:0xffff885545d0]   119253 ms: Mark-Compact (reduce) 2041.5 (2083.8) -> 2040.4 (2084.2) MB, 1781.11 / 0.04 ms  (+ 883.5 ms in 150 steps since start of marking, biggest step 55.1 ms, walltime since start of marking 2996 ms) (average mu = 0.426, current m[42:0xffff885545d0]   122669 ms: Mark-Compact (reduce) 2041.4 (2084.2) -> 2041.1 (2084.7) MB, 3414.29 / 0.00 ms  (average mu = 0.241, current mu = 0.001) allocation failure; scavenge might not succeed
[Docker Image CI/cmit-docker-ci]   | 
[Docker Image CI/cmit-docker-ci]   | 
[Docker Image CI/cmit-docker-ci]   | <--- JS stacktrace --->
[Docker Image CI/cmit-docker-ci]   | 
[Docker Image CI/cmit-docker-ci]   | FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
[Docker Image CI/cmit-docker-ci]   |

一、问题定位过程

1. 错误日志分析

从GC日志可以看出内存耗尽的全过程:

[42:0xffff885545d0] 119253 ms: Mark-Compact (reduce) 2041.5 -> 2040.4 MB
...
scavenge might not succeed
  • Node进程尝试回收内存失败(Mark-Compact阶段)
  • 堆内存限制约2GB时崩溃(默认堆内存上限)

2. Docker环境特殊性验证

通过对比实验发现:

环境 结果
本地Win 构建成功
Docker容器 构建失败

二、根本原因解析

1. Vite构建内存机制

现代前端构建工具的内存消耗主要来自:

  • 依赖图分析(尤其monorepo项目)
  • 代码转译(Babel

网站公告

今日签到

点亮在社区的每一天
去签到