You need to enable JavaScript to run this app. Ubuntu 18.04下Angular Universal生产SSR构建卡16%报137,本地可正常编译
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04下Angular Universal生产SSR构建卡16%报137,本地可正常编译

报错根因
  • 终端输出的Killed标记、退出码137,是Ubuntu系统OOM(内存耗尽)保护机制的典型表现:当系统检测到可用内存不足时,会强制终止当前资源占用最高的进程,避免整机无响应宕机。
  • 构建流程卡在16%处理@angular/core模块阶段被中断,是因为Angular生产构建、尤其是SSR双端包编译过程,对Node进程的内存需求较高;本地开发环境通常内存配置更充足,而低配服务器(常见1G/2G内存的云主机)物理内存远达不到构建需求,加上Node进程的默认堆内存上限是根据运行环境物理内存自动适配的,低配环境下自动算出的堆内存阈值远低于构建实际需要,就会出现本地能正常编译、服务器上构建被强制终止的情况。
可落地的解决思路
  • 先清理服务器现有内存占用
    执行命令释放系统缓存:sudo sync; sudo echo 3 > /proc/sys/vm/drop_caches
    同时临时停掉服务器上运行的其他高内存常驻进程(比如已在运行的项目实例、占满内存的数据库连接),腾出基础内存空间。
  • 调整Node进程的内存配置上限
    修改项目package.json中的build:ssr脚本,增加Node的内存分配参数,避免无限制申请内存触发OOM:
    原脚本内容:"build:ssr": "ng build --prod && ng run project:server:production"
    修改后内容:"build:ssr": "NODE_OPTIONS=\"--max-old-space-size=2048\" ng build --prod && ng run project:server:production"
    这里的2048代表给Node构建进程分配2G的堆内存上限,具体数值要根据服务器实际剩余内存调整,不要设置为超过总物理内存的70%,要留足系统本身运行需要的基础内存。
  • 配置Swap交换分区做兜底
    如果服务器物理内存只有1G/2G,无法覆盖构建时的内存峰值,可以创建2G大小的交换分区,用硬盘空间模拟临时内存兜底:
    依次执行命令:
    sudo fallocate -l 2G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
    配置完成后再重新执行构建命令,即便内存短暂达到峰值,也会通过交换分区过渡,不会直接杀掉构建进程。
  • 优化方案:如果服务器配置实在过低,不适合直接在服务器上执行编译流程,可以把SSR项目的构建环节放到本地环境或CI流水线完成,将最终编译产物直接上传到服务器运行,完全跳过服务器端的编译步骤。

内容的提问来源于stack exchange,提问作者esteban rua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 14:15:03