环境:centos6.3
1. 要使用distcc当然需要先去安装。这里使用官方源码编译安装。 下载地址:https://code.google.com/p/distcc/downloads/list
这里选择需要下载的内容,我选择的是distcc-3.2rc1.tar.bz2
2. 编译distcc源码需要先安装python支持, 在centos中使用 sudo yum install python-devel 其他linux可以参照
3. 安装好了python后,解压distcc源码:
进入distcc-3.2rc1.tar.bz2 : cd distcc-3.2rc1
执行:./autogen.sh ---->./configure ---> make -----> make install
4. 至此distcc就算安装完成,安装结束后还需要开启distccd这个守护进程。为方便每次自启动该守护进程,可以将其添加到开机自启动项
在centos中 可以到 /etc/rc.local 中添加
其中 --user 表明使用nobody这个用户身份 --allow 表明那一些ip允许访问,这里 192.168.168.0/8 表明192.168.168.1—192.168.168.254这个区间的IP可以使用该机器的distcc
5. distcc相关的环境变量:
distcc需要指明他可以使用的编译阵列。这些环境变量可以存放在~/.bashrc. 使用vim打开该文件:vim ~/.bashrc
DISTCC_HOSTS 指明那些机器安装了distcc 且开启了distccd。编译过程中可以使用这些机器进行编译
DISTCC_LOG 表明distcc相关日志
6. 重启centos
PS:在其他DISTCC_HOSTS列表中的机器上重复1-6步骤。 注意DISTCC_HOSTS 中的列表项用空格隔开。
7. 进入你要进行编译的文件目录:
-j16 可以同时编译多个, CXX=distcc 表明c++文件使用distcc来进行编译 对饮C文件 可以使用 CC=distcc
然后就开始编译了,在编译过程中可以使用命令 distccmon-text 2 来查看编译过程中使用了那一些机器
可以看到有很多文件在其他机器上编译。
就我们项目而言,之前单个机器上编译gameserver差不多需要20分钟,在部署之后,使用distcc编译缩短在6分钟左右。 效果不错。
1、需要 python 头文件,下载安装。
2、下载安装 distcc-3.1.tar.bz2。
3、export DISTCC_HOSTS='localhost 10.10.13.162‘ //添加所有欲分发的distcc服务器IP列表,ip应按各服务器性能由好到差排列。
export DISTCC_VERBOSE=1 //给出调试信息
export DISTCC_LOG=”/root/disstcc.log” //编译出错时可以查看日志,默认路径是 /var/log/messages
以上可以写入到 ~/.bash_profile 中,以便开机有效。
4、在每一台服务器上安装好 distcc 之后,先启动服务器 distccd --daemon --user nobody --allow 10.10.0.0/16 接收来自10.10网段的所有TCP连接,最好加入开机启动。(如果不加--user nobody则会提示:distccd[4596] (dcc_preferred_user) Warning: no such user as "distcc")
5、可以通过 distccmon-text 1 命令查看分布编译情况,1表示1秒。如果在 ./configure 时,加上了 --with-gnome or --with-gtk 选项,则还可以使用 distccmon-gnome 1 这个图形界面来查看。
6、可以和 ccache 配合 : time make -j12 CXX="ccache distcc",不过感觉同时使用 distcc 和 ccache 的效果跟只使用 distcc 的效果差不多。如果只有一台机器,就使用 ccache ,如果有多台机器就只使用 distcc 吧。
7、使用 dmucs 配合 distcc 解决分布式编译的负载均衡问题:
http://www.ibm.com/developerworks/cn/aix/library/0905_yangyi_distcc/
下面转自:http://blog.chinaunix.net/uid-20553497-id-3214404.html
distcc是一个分布式的编译工具,包含distccd和distcc。其中distccd是服务端,需要安装在远程协助编译的多台服务器上,而distcc是一个客户端,需要安装在分发编译任务的服务器上。centos可以直接在http://pkgs.repoforge.org/distcc/ 上下载2个RPM包:
distcc-2.18.3-2.el5.rf.x86_64.rpmdistcc-server-2.18.3-2.el5.rf.x86_64.rpm
test[1-5].inner.net是我的5台服务器,直接在5台服务器上都安装这2个包,然后同步一下5台服务器的配置文件
- # cat /etc/sysconfig/distccd
- ### See distcc(1) manual page for more information on these options.
- ###
- OPTIONS="--nice 5 --jobs 10 --port 3632 --allow 127.0.0.1 --allow 10.0.0.0/8 "
- #USER="distcc"
- ### Set this if don't want distccd to use gcc or g++ by accident.
- #DISTCCPATH="/usr/lib/distcc/bin"
红色部分是需要注意的,distcc默认使用的端口是3632,而distccd默认的端口是1234,这个搞得我查了很久才找到原因。
修改配置后对于每个服务器
- chkconfig --level 2345 distccd on
- service distccd restart
然后就可以使用了,以编译nginx为例
- export CC=distcc; ./configure
- export DISTCC_HOSTS="test1.inner.net .... test5.inner.net"
- make -j 20
这样就会向每台服务器分发出任务。
预处理工作其实还是在分发任务的机器上执行的,然后把预处理后的代码传输到远程服务器,编译成.o文件,再取回来链接生成可执行程序。
编译的时候参与编译的服务器上可以看到日志 tail /var/log/distccd.log
分发编译任务的机器上可以使用 distccmon-text 1查看编译任务的分发
posted on 2018-06-08 10:06
长戟十三千 阅读(2167)
评论(0) 编辑 收藏 引用 所属分类:
编程技巧随笔