编译PHP扩展失败因内存不足,需创建2GB Swap文件并重启宝塔面板:fallocate -l 2G /swapfile;chmod 600 /swapfile;mkswap /swapfile;swapon /swapfile;echo '/swapfile none swap sw 0 0' >> /etc/fstab;修改PHP memory_limit 至512M;卸载残留扩展后重试安装。

编译PHP扩展失败时,configure 或 make 中断在内存不足阶段
宝塔面板里点「安装扩展」后卡住、报错退出,常见日志末尾出现 virtual memory exhausted: Cannot allocate memory 或 cc: internal compiler error: Killed signal terminated program cc1 —— 这基本是物理内存+Swap加起来撑不住 GCC 编译过程的峰值占用。PHP 扩展(尤其 redis、swoole、grpc)启用优化编译时,单个 gcc 进程可能吃掉 1.2GB 以上内存,而很多低配云服务器(如 1G RAM 的轻量应用服务器)默认没开 Swap,或只配了 512MB。
检查当前内存与Swap使用情况
别只看宝塔首页的「内存使用率」,那只是瞬时快照,且不包含内核为编译临时分配的页缓存。真正要查的是:
-
free -h:看Mem总量和Swap是否为0B;若Swap列全空,说明没启用 -
swapon --show:返回空则确认无激活的 Swap 设备 -
cat /proc/meminfo | grep -i 'commit':关注CommitLimit和Committed_AS,若后者接近前者,OOM killer 很可能已介入
快速创建并启用 2GB Swap 文件(适用于 CentOS/Ubuntu)
宝塔后台不能直接加 Swap,得 SSH 操作。注意:不要用 dd if=/dev/zero of=/swapfile bs=1G count=2,部分系统会因 I/O 调度卡死;改用更稳妥方式:
-
fallocate -l 2G /swapfile(比dd快,且多数现代文件系统支持) -
chmod 600 /swapfile(权限必须严格,否则swapon拒绝加载) -
mkswap /swapfile(格式化为 Swap 类型) -
swapon /swapfile(立即启用) - 写入开机自动挂载:
echo '/swapfile none swap sw 0 0' >> /etc/fstab
执行完再跑 free -h,应看到 Swap 行显示 2.0G。
宝塔中重试扩展安装前的关键动作
光加 Swap 不够——PHP 编译进程可能还在用旧的内存限制上下文。必须做两件事:
- 在宝塔「软件商店 → PHP → 设置 → 配置修改」里,把
memory_limit改成512M或更高(仅影响 PHP 运行时,不影响编译,但部分扩展安装脚本会读它) - 重启宝塔面板:
bt restart,确保其后台任务进程加载新系统内存状态 - 回到扩展页面,**先点「卸载」已失败的扩展(如有残留)**,再点「安装」——避免旧编译中间文件引发冲突
Swap 是兜底手段,不是万能解药。如果服务器长期只有 1G 物理内存,又频繁装多个大扩展,编译慢、IO 等待高、甚至触发 OOM killer 杀掉 mysqld,这种场景下,换 2G 起步的配置比硬扛 Swap 更可靠。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











