Ubuntu 20.04 AWS EC2中Next.js build命令偶发卡住如何解决?
故障根因判断
该偶发卡顿问题本质是t2.micro实例的资源配额不足导致,你观测到的50%内存使用率是静态空闲值,并非构建阶段的瞬时峰值数据,核心原因有两点:
- t2.micro为AWS突发性能型实例,仅配备1G物理内存,
next build执行到「创建优化生产构建」阶段时,webpack会同时启动多进程执行代码编译、资源压缩、Tree Shaking等操作,瞬时内存占用会突破剩余可用内存上限,此时系统要么触发OOM Killer中断构建进程,要么强制调用swap分区运行,但你的磁盘已使用76.2%,剩余可分配swap空间极小,会直接触发磁盘IO瓶颈导致进程停滞。 - t2实例依赖CPU积分维持高性能运行,如果你的部署频率较高,CPU积分耗尽后实例性能会被限制到基准性能的10%以下,也会导致构建流程无响应。
重启实例后会自动清空残留的构建进程、swap缓存,同时释放被占用的资源配额,因此可以正常完成构建。
对应解决方案
升级实例配置可以彻底解决问题
直接将实例升级到至少t2.small(2G内存)或t3.small规格,即可覆盖绝大多数中小型Next.js项目的构建资源需求,若项目依赖较多、代码量较大,建议选择配备4G内存的实例规格,完全避免构建时的资源瓶颈。
暂时不升级也可以通过以下配置缓解问题
- 限制构建阶段的并发数,在
next.config.js中添加配置强制单线程编译,降低瞬时资源消耗:
module.exports = { webpack: (config) => { // 禁用压缩并行 if (config.optimization.minimizer) { config.optimization.minimizer.forEach(minimizer => { if (minimizer.constructor.name === 'TerserPlugin') { minimizer.options.parallel = 1 } }) } return config } }
- 每次部署前执行
rm -rf .next/cache清理构建缓存,释放磁盘和内存占用 - 给实例额外配置2G左右的swap分区,规避瞬时内存不足导致的进程中断
内容的提问来源于stack exchange,提问作者J. Diaz
相关产品推荐
相关产品推荐

