Yarn build占用100%CPU导致EC2实例上React应用构建卡死问题求助
问题根因
- 你使用的t2.small属于AWS突发性能型实例,仅配备1vCPU、2GiB内存,基线CPU性能仅为20%,短时间超过基线性能会消耗CPU积分,积分耗尽后CPU会被强制限流到基线水平,直接导致构建任务阻塞甚至永久卡死
- Node.js生态的构建工具(包括webpack、CRA默认构建工具、esbuild等)默认会以当前设备CPU核心数作为并行任务数上限,1vCPU环境下多任务抢占CPU资源,再加上构建过程中内存不足触发swap交换,进一步拉高CPU占用
- 本地Mac设备CPU核心数、内存都远高于t2.small,因此不会触发资源瓶颈
可落地的解决方案
1. 限制构建过程的并行任务数
在你的yarn构建命令前添加环境变量限制并行数和内存上限:
# 限制Node堆内存为1.5G、并行任务数为1,适配单核心CPU环境 NODE_OPTIONS=--max-old-space-size=1536 yarn build
如果使用的是Create React App创建的项目,还可以额外指定并行压缩的worker数量:
GENERATE_SOURCEMAP=false TERSER_PARALLEL=false yarn build
关闭SourceMap生成和并行压缩可以大幅降低CPU和内存消耗。
2. 调整EC2实例配置(可选)
如果需要长期在实例上执行构建任务,建议更换为非突发型的通用实例,比如t3.small(基线性能提升到30%、CPU积分积累速度更快)或者c5.large(计算优化型实例,适合编译场景)。如果不想调整实例规格,可以在EC2控制台将t2实例的无限积分模式打开,避免CPU积分耗尽后被限流。
3. 优化构建执行逻辑
- 把项目中不需要的构建插件、静态资源压缩规则临时关闭,仅在生产发布环节开启
- 不要同时在同一实例上执行多个应用的构建任务,逐个执行避免资源抢占
内容的提问来源于stack exchange,提问作者Bogdan Klochko
相关产品推荐
相关产品推荐

