本文主要概述Linux下如何调整使用Make进行编译时占用的系统负载。
设置方式
为了使编译的时候负载不要过高,运行 make
之前最好设置好 MAKEFLAGS
,例如如下运行:
$export MAKEFLAGS=-l16
$make
为简单期间,可以将 export MAKEFLAGS
-l16= 追加到 ~/.bashrc
中,这样以后登录后便不用重复设置了。
echo "export MAKEFLAGS=-l16" >>~/.bashrc
若添加到 /etc/profile
或者 /etc/bash.bashrc
中,那么所有用户都不用设置了(当然需要管理员权限)。
设置前的负载:
设置后的负载:
缺陷
也有一些限制,
-
这样控制的是所有人的
make
占用系统资源的情况,目前还无法精确到一个人占用多少(不太可能实现)所以如果期望所有人编译时,系统能留出8个核是空闲的,那么就设置成 MAKEFLAGS=-l24
-
当然如果有人脚本里面私下写成
make -l xxx
就控制不住了(一般不会有人专门这样改)。
原理
结合 MAKEFLAGS
环境变量,和 -l
选项。 将合适的 -l
内容,放到 MAKEFLAGS
之后,再执行 make
.
-
make
可通过-l
选项可以指定负载上限,当负载超过指定值,Make将不会再创建额外job。 -
MAKEFLAGS
环境变量指定所有make
进程的默认选项。 - 系统负载单核单CPU,1以下是空闲,3的时候表示很忙,5-8的时候表示忙得难以处理进程了。
- 当前系统
cat /proc/cpuinfo
可知 cpu 总共为 32 核心,所以建议设置成32*0.5=16。 - 通过
top
或者uptime
可查看最新1分钟、5分钟、15分钟的平均系统负载,正常以5-15分钟为准。
负载单核单CPU负载在1以下比较空闲,3的时候就会很忙,5-8的时候就会难以处理进程了。
我们可以将阈值设置为3。那么单核单CPU若达到3, 则MAKE不继续创建新的任务。当前系统为32核,那么如果负载达到96就不很忙了。
top,包括 uptime, 可以查看负载,依次列出1,5,15分钟的平均负载,正常以5-15分钟为基准。
网友评论