编译大项目(特别是c++项目)时,经常会造成个人电脑卡顿甚至崩溃。而如果是在公共服务器上的话甚至会导致抢占资源。所以需要用一些方法来限制编译的程序。
提示
如果程序理论上需要消耗的内存大小大于你的电脑所能提供的内存,那程序也只有消耗交换空间和直接崩溃两条路可走。所以电脑不行的话还是换电脑吧,或者放到服务器上运行。
nice
nice
是一个 Linux 自带的指令,用于调整程序优先级。在程序面前加上nice
可以在默认的优先级上进行再调整。调整范围为 -20 (最高优先级)到 19 (最低优先级)。数值越高
这里抄一段菜鸟教程上面的实例1
1 | # vi & //后台运行 |
taskset / sched_setaffinity
taskset
指令可以指定程序运行在哪个cpu上。cpu编号从0开始
如以下指令1
taskset -c 4-7 ./test.sh&
将 ./test.sh 这个任务绑定在第5到第8个cpu上运行。其底层是使用了sched_setaffinity()
系统调用,参考sched_setaffinity(2) - Linux man page。子进程如果继承了环境变量的话,那么绑定cpu的操作也会自动继承到子进程上。
cgroups
cgroups 机制对系统底层资源进行了物理隔离,是 linux 内核资源虚拟化的基础。用 cgroups 对程序隔离的方式比较灵活。这里不展开了,参考这篇文章:lecury-浅谈Linux Cgroups机制
c++编译加速的几个方式
distcc
distcc 是一个将 C、C++、Objective C 或 Objective C++ 等程序的编译任务分发到网络中多个主机的程序。distcc 力求实现和本地编译相同的结果,安装、使用都很方便,而且通常比本地编译快很多 2
ccache
由于C/C++编译时需要大量重复展开头文件,造成了编译慢的情况。ccache将头文件构建了高速缓存,可以加快编译速度。并且 ccache 适配了 gcc 和 clang, archlinux 中的 makepkg 指令也支持使用 ccache。3
参考资料
1:Linux nice命令 - 菜鸟教程
2:distcc - archlinux wiki
3:ccache - archlinux wiki