编译PHP失败多因系统内存不足导致OOM,应先检查free -h的available值和swapon --show是否启用Swap;1GB VPS易失败因编译峰值内存超900MB;添加2GB Swap推荐fallocate方式,并关闭宝塔PHP监控以释放内存。

编译PHP失败时,先看 configure 或 make 报什么错
宝塔面板里点“编译安装”PHP卡住或报错,90% 不是配置问题,而是系统资源不足。最典型的现象是:configure 阶段成功,但 make 过程中突然中断,终端只显示 Killed 或直接退出,日志里找不到具体错误;或者出现 cc: internal compiler error: Killed signal terminated program cc1plus —— 这基本等于系统 OOM(内存溢出)被内核 kill 了。
此时别急着重装系统或换版本,先确认两件事:
-
free -h查真实可用内存,尤其关注available列(不是free) -
swapon --show看有没有启用 Swap,输出为空就代表没开
为什么 1GB 内存的 VPS 编译 PHP 极易失败
PHP 源码编译(尤其是带 --enable-opcache、--with-mysqlnd 等常用扩展时)在 make 阶段会大量使用内存,GCC 编译器本身就很吃 RAM。实测:CentOS 7 + PHP 7.4 全默认扩展编译,峰值内存占用常突破 900MB;PHP 8.2 更高,轻松破 1.2GB。而很多低价云服务器标称 1GB 内存,实际 available 可能只剩 600–700MB(系统、宝塔后台、MySQL 已占一部分)。
没有 Swap 的情况下,Linux 内核一旦判定物理内存不够,就会触发 OOM Killer,随机挑一个进程干掉——make 进程大概率中招。
立即学习“PHP免费学习笔记(深入)”;
添加 2GB Swap 文件的可靠操作步骤
不推荐用 dd if=/dev/zero of=/swapfile bs=1G count=2 直接创建(部分 SSD 或小硬盘可能因 I/O 失败)。更稳妥的做法是分块写入,并确保权限和挂载参数正确:
- 执行
sudo fallocate -l 2G /swapfile(比dd快且安全) - 设权限:
sudo chmod 600 /swapfile - 格式化:
sudo mkswap /swapfile - 启用:
sudo swapon /swapfile - 开机自启:向
/etc/fstab追加一行/swapfile none swap sw 0 0
验证是否生效:swapon --show 应输出含 /swapfile 和 2G 的行;free -h 中 Swap 行应显示 2.0G。
编译前必须关闭宝塔的“PHP 运行环境”自动检测
很多人加完 Swap 还失败,是因为宝塔在后台偷偷启动了 PHP 监控或扫描进程,进一步抢占内存。进入宝塔面板 → 软件商店 → 找到已安装的 PHP 版本 → 点击“设置” → 关闭“运行状态监控”和“自动检查更新”。再回到“编译安装”页面,刷新后重试。
另外注意:make -j 并行数别设太高。默认 make -j$(nproc) 在双核机器上就是 -j2,够用;强行设 -j4 反而加剧内存压力。宝塔源码编译界面不暴露该参数,所以依赖它默认行为即可。
Swap 是临时解法,不是长期方案。如果频繁需要编译,建议升配到 2GB 内存以上——毕竟虚拟内存速度远低于物理内存,编译耗时会明显增加,且 SSD 寿命有损耗风险。



















