源码编译 Nginx 时“内存不足”主因是高并发编译导致瞬时内存峰值超限,解决方法包括:降低 make -j 并发数(如 -j1)、启用 1–2GB Swap、精简模块配置(如移除 --with-http_v2_module)。

源码编译 Nginx 时提示“内存不足”,通常不是系统物理内存真的耗尽,而是编译过程(尤其是 make 阶段)在高并发编译(如 make -j$(nproc))下瞬时内存峰值超出可用内存或 Swap,导致 GCC 或链接器失败。常见报错包括:virtual memory exhausted: Cannot allocate memory、cc1: out of memory allocating,或进程被 OOM Killer 杀死。
检查真实内存压力
先确认是否真因内存紧张导致:
- 运行
free -h查看available值,若低于 200MB,风险较高; - 执行
swapon --show确认 Swap 是否启用,未启用时小内存机器极易失败; - 用
htop观察编译时各进程 RSS 占用,GCC 多线程编译单个 cc1 进程常吃 500MB+ 内存。
降低编译并发数
make -j 是最大诱因。默认 -j$(nproc) 会启动与 CPU 核心数一致的编译任务,大幅推高内存需求。
- 改用
make -j1(串行编译),最稳妥,时间稍长但内存占用最低; - 折中方案:设为
make -j$(($(nproc)/2 + 1)),例如 4 核机器用-j3; - 避免使用
make -j(无参数),它会无限启任务,极易崩。
启用并扩容 Swap 空间
即使有 1GB 物理内存,也建议配 1–2GB Swap 保底,尤其在最小化安装系统上:
- 创建临时 Swap 文件:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile; - 验证:
swapon --show应显示该文件,free -h中 Swap 行非空; - 如需永久生效,追加
/swapfile none swap sw 0 0到/etc/fstab。
精简编译配置与依赖
减少模块可显著降低链接阶段内存消耗:
- 去掉非必需模块,例如不用 HTTP/2 可删
--with-http_v2_module; - 若不需 SSL,直接省略
--with-http_ssl_module和openssl-devel; - 确保
pcre-devel、zlib-devel已安装——缺失时 configure 可能静默降级,但 make 阶段易出错,反而更耗资源重试。
不复杂但容易忽略


















