解决方案:限制 “单个包编译的线程数”(核心)
要真正限制总线程数,需同时控制colcon 的并行包数和单个包的编译线程数,以下是 3 种实操方案(按易用性排序):
方案 1:全局限制 make/CMake 的线程数(推荐,一劳永逸)
ROS2 包最终由make/ninja编译,先全局设置这两个工具的默认线程数,再配合 colcon 的并行包数,精准控制总线程:
1.编辑 bash 配置文件(永久生效):
nano ~/.bashrc
2.在文件末尾添加以下内容(以 8 核 CPU 为例,限制单个包用 4 线程):
# 限制make默认线程数(核心)
export MAKEFLAGS="-j4"
# 限制ninja默认线程数(ROS2常用编译工具)
export NINJAFLAGS="-j4"
建议值:单个包线程数 = CPU核心数/2(比如 8 核设 4,16 核设 8);
3.生效配置:
source ~/.bashrc
# 验证是否生效
echo $MAKEFLAGS # 输出-j4即成功
4.配合 colcon 的并行包数编译(最终总线程≈单个包线程数 × 并行包数)
# 并行编译2个包,每个包用4线程,总线程≈8(8核CPU刚好占满但不超额)
colcon build -j 2

3365

被折叠的 条评论
为什么被折叠?



