问题现象:诡异的"消失的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