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

Ubuntu系统下安装PHP的gRPC扩展失败,如何解决?

解决Ubuntu下pecl安装PHP gRPC扩展时make失败的问题

问题描述

在Ubuntu系统中执行命令sudo pecl install grpc安装PHP的gRPC扩展时,安装中途卡住后失败,输出以下错误:

g++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make: *** [Makefile:1428: src/core/ext/xds/xds_server_config_fetcher.lo] Error 1
ERROR: `make' failed

原因分析

该错误核心原因是系统可用内存不足:编译gRPC的C核心代码需要消耗大量内存,当系统内存耗尽时,Linux内核会触发OOM(内存不足)Killer,终止占用资源最多的编译进程(此处为cc1plus,g的编译前端),导致make命令执行失败。

解决方法

1. 临时增加交换空间(Swap)

交换空间可作为物理内存的补充,缓解内存不足问题:

  • 创建4GB的swap文件(可根据实际情况调整大小,比如2GB):
    sudo fallocate -l 4G /swapfile
    
  • 设置swap文件的安全权限:
    sudo chmod 600 /swapfile
    
  • 格式化swap文件:
    sudo mkswap /swapfile
    
  • 启用swap:
    sudo swapon /swapfile
    
  • 重新执行安装命令:
    sudo pecl install grpc
    
  • (可选)若需永久保留swap,编辑/etc/fstab文件添加自动挂载:
    sudo nano /etc/fstab
    
    在文件末尾添加一行:
    /swapfile none swap sw 0 0
    
    按Ctrl+O保存,Ctrl+X退出。

2. 限制编译并行任务数

默认make会使用与CPU核心数相同的并行任务,加剧内存消耗,可强制单线程编译:

  • 通过PECL获取源码并手动编译:
    sudo pecl download grpc
    tar -xzf grpc-*.tgz
    cd grpc-*/
    phpize
    ./configure
    make -j1  # 指定仅用1个编译线程
    sudo make install
    
  • 最后在PHP配置文件(如/etc/php/8.1/cli/php.ini,版本根据实际情况调整)中添加:
    extension=grpc.so
    

3. 升级物理内存(长期解决方案)

若需频繁编译大型项目或运行内存密集型服务,直接升级系统物理内存是最彻底的解决方式。

验证安装

安装完成后,执行以下命令验证gRPC扩展是否成功加载:

php -m | grep grpc

若输出grpc,说明扩展安装成功。

内容的提问来源于stack exchange,提问作者Joshua Nnamani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:00:56