distcc构建时如何确认指定服务器被使用及相关配置问题
问题解答
1. 如何确认构建过程中两台客户端服务器确实被调度使用?
首先注意:你当前的测试Makefile只有echo和touch操作,没有调用gcc的编译动作,distcc不会触发任何任务分发,建议先替换为带C/C++代码编译的测试用例再验证。
验证方法:
- 构建时在主节点另开终端执行
distccmon-text 1(数字1表示每秒刷新一次),可实时看到每个节点正在处理的编译任务数量、任务状态 - 登录客户端节点查看日志:默认distccd服务日志会输出到
/var/log/syslog,收到编译任务时会有对应请求记录 - 主节点执行构建前添加环境变量
export DISTCC_VERBOSE=1,构建输出日志会明确标注每个编译任务分发到的目标节点IP
额外排查:你当前执行pump命令时只识别到1个可用节点,先检查另外两台节点的distccd服务是否已启动、防火墙是否开放3632端口、SSH免密登录是否正常。
2. 客户端服务器的配置要求是否与主节点一致,若不一致存在哪些差异?
不需要完全一致,核心要求和差异如下:
- 必须一致的配置:客户端的gcc/g++大版本必须和主节点完全匹配(比如主节点用gcc 9.4,客户端不能用gcc 11),否则编译产物会有兼容性问题;所有节点的目标架构必须一致(比如均为x86_64,跨架构无法正常编译)
- 允许存在的差异:
- 主节点需要安装完整distcc+pump组件,存放全部项目源码、头文件、依赖库;客户端只需要安装distccd服务和对应版本的编译器,不需要存放任何项目源码和依赖
- 客户端硬件配置可以低于主节点,操作系统小版本不同也不影响使用
3. 如何查看distcc的UI监控界面?
- 桌面环境可直接使用distcc自带的GTK图形监控工具
distccmon-gnome,安装后启动即可看到图形化的节点负载、任务调度状态 - 无桌面的服务器环境,可直接使用命令行监控
distccmon-text,可实时输出所有节点的运行数据,不需要额外配置;也可自行部署第三方web监控工具实现页面化查看。
4. 如何接入未安装distcc的批量机器参与分布式构建?
distcc必须要求客户端节点运行distccd服务才能接收编译任务,无法直接接入未安装的机器,可通过批量部署工具快速配置:
- 用ansible、saltstack等批量运维工具,写好自动化部署脚本,批量执行distcc安装、distccd服务启动、SSH公钥下发操作,可在几分钟内部署上百台节点
- 容器化环境可提前打包好带对应版本编译器和distccd服务的镜像,批量启动容器即可接入,不需要修改宿主机环境。
内容的提问来源于stack exchange,提问作者anish anil
相关产品推荐
相关产品推荐

