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 0Ctrl+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
相关产品推荐
相关产品推荐

