ROS2 Galactic下MoveIt编译耗尽内存致Ubuntu崩溃求助
编译ROS2 MoveIt UR5e包时内存耗尽问题
在Ubuntu 20.04系统中使用ROS2 Galactic与MoveIt操控UR5e机械臂,执行官方文档推荐的colcon build --mixin release编译命令时,内存及交换空间会被耗尽,编译到37/45任务时系统冻结,且pilz_industrial_motion_planner包编译失败。目前CPU占用问题已解决,但尝试过以下内存限制方法均无效:
- 使用
systemd-run --scope -p MemoryLimit=3000M -p CPUQuota=70% -- colcon build --mixin release --parallel-workers 3限制资源 - 用
cpulimit、调整swappiness参数、修改ulimit、设置nice优先级
可行解决方法
1. 单独编译问题包
先跳过pilz_industrial_motion_planner完成其他包的编译,再单线程编译这个高内存消耗的包:
# 先编译除pilz包外的所有内容 colcon build --mixin release --packages-skip pilz_industrial_motion_planner # 单线程编译pilz包 colcon build --mixin release --packages-select pilz_industrial_motion_planner --parallel-workers 1
2. 启用编译缓存减少资源重复消耗
安装ccache缓存编译中间文件,避免重复编译时的内存浪费:
sudo apt install ccache # 编译时启用ccache colcon build --mixin release --cmake-args -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache --parallel-workers 2
3. 临时扩容交换空间
如果物理内存不足,临时创建大尺寸交换文件缓解内存压力:
# 创建8G交换文件 sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 编译完成后可关闭并删除交换文件 # sudo swapoff /swapfile # sudo rm /swapfile
4. 检查并调整问题包的编译配置
查看pilz_industrial_motion_planner包的CMakeLists.txt,确认是否存在强制高并行编译的配置(如set(CMAKE_BUILD_PARALLEL_LEVEL 4)),将其修改为1或2后再编译。
内容的提问来源于stack exchange,提问作者LordGowther
相关产品推荐
相关产品推荐

