0. 环境描述
- 系统环境:Ubuntu20.04 + ROS-noetic 16G内存
- 运行工程:coinlio
1. 问题描述
程序正常编译,在ros包播发到400多的时候,主节点退出,终端显示process has died exit code -9
2.排查过程
- 搜索Linux状态退出码9的含义,对应SIGKILL杀死进程(必杀),说明程序占用的系统资源过多,导致程序被OS给干掉了状态码(exit code)的分析
- 使用top监控系统资源消耗,发现coinlio运行时MEM值不断上涨,到59时出现节点异常退出
- 参考内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决(解释SIGKILL原因)
怀疑是播发速度太快,而程序处理稍慢,导致缓冲区中滞留过多数据。使用rosbag play -r 0.25将播发速度降低,问题依然存在,推测程序中存在内存泄漏