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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:01