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

使用Bazel编译TensorFlow时报错gcc: internal compiler error: Killed (program cc1plus)

问题原因

gcc: internal compiler error: Killed (program cc1plus) 绝大多数场景下是编译进程被系统OOM(内存溢出)杀手强制终止导致的,属于内存资源不足触发的系统保护机制。你虽然已经添加了Bazel资源限制参数,但依然存在两点问题:

  1. 你设置的local_ram_resources=HOST_RAM*.5预留的内存不足以支撑LLVM等大模块的编译需求,单个LLVM编译单元的峰值内存占用可达到4~8G,若机器总内存偏低、或者有其他进程占用内存,依然会触发OOM。
  2. Bazel的资源限制是全局配额,不会限制单个编译进程的内存占用,你报错的LLVM CodeGen模块本身内存需求较高,峰值超过剩余可用内存时依然会被系统杀掉。
解决方法
  • 收紧Bazel并行任务数和资源配额
    直接指定固定并行数替代动态CPU/内存计算,比如限制同时最多跑2个编译任务,内存配额调整为总内存的30%:
    env BAZEL_LINKOPTS=-static-libstdc++:-static-libgcc BAZEL_LINKLIBS=-l%:libstdc++.a:-lm BAZEL_CXXOPTS="-std=c++17" bazel build -c opt --verbose_failures //tensorflow:libtensorflow_cc.so --action_env="LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" --jobs=2 --local_ram_resources=HOST_RAM*.3 --local_cpu_resources=2
    
    如果仍然报错,可以把--jobs参数改为1,完全串行编译,虽然速度较慢但内存占用最低。
  • 添加交换分区兜底
    若机器未开启swap或者swap空间偏小,可临时添加4~8G交换文件,避免直接触发OOM杀进程:
    # 创建4G交换文件
    sudo fallocate -l 4G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
    编译完成后可手动关闭删除swap文件释放空间:
    sudo swapoff /swapfile
    sudo rm /swapfile
    
  • 升级GCC版本
    GCC 7.x版本编译C++17代码的内存优化较差,升级到GCC 9及以上版本可显著降低编译时内存占用,同时可规避大量旧版本编译器的已知BUG。
  • 清理内存占用进程
    编译前关闭浏览器、IDE、其他后台服务等内存占用较高的进程,保证编译阶段可用内存充足。

内容的提问来源于stack exchange,提问作者Er g Ch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:09:03