Ubuntu 22.04执行ROS2 colcon build --symlink-install时系统冻结问题求助
嗨,我来帮你捋捋这个问题~ 首先你遇到的内存直接飙到接近满负荷、系统卡死的情况肯定是不正常的,ROS2编译确实会吃资源,但不至于直接把15.3G内存榨干到14.4G,大概率是并行编译的进程开太猛了,系统扛不住。
给你几个实用的解决思路:
限制colcon并行编译的进程数:默认情况下colcon会用和你CPU核心数一致的进程数来编译,要是核心多的话,每个编译进程再占点内存,很容易直接爆内存。你可以手动指定并行数,比如你机器是8核的话,试试
colcon build --symlink-install --parallel-workers 4,砍一半进程数,内存占用会明显降下来。临时加swap分区当缓冲:要是暂时没法升级物理内存,那就整个swap分区当虚拟内存救急。比如创建4G的swap:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile这样内存满了之后系统会自动用swap顶一下,不会直接卡死,虽然编译速度会慢一点,但总比中途冻结强。
编译前腾内存:编译前把浏览器、IDE这些吃内存的大软件都关掉,你平时空载都用2.8G,腾出来的空间能给编译留足缓冲。
排查特定包的问题:有没有可能是工作空间里某个包的CMake配置有问题?比如开了冗余的编译选项,或者依赖了巨占资源的库?可以试试单独编译某个包,用
colcon build --symlink-install --packages-select 你的包名,看看是不是某个特定包把内存拉爆了。
从你描述的htop监控情况来看,应该就是多进程并行编译叠加起来把物理内存耗光了,系统资源被榨干才会直接冻结,按上面的方法调整下应该能解决。
备注:内容来源于stack exchange,提问作者Alperen Keser

