现象

线程中有一个由ROS自己创建的线程CPU占用率接近100%,该线程中的XmlRpc::XmlRpcDispatch::work()函数占用过高,使用sudo perf top -p [pid]得到如图

该程序运行一开始占用率很低,几分钟后该函数占用达到4.8%,而后突然变成100%

使用htop的ptrace查看该线程的系统调用,发现以很高的频率在调用POLLIN

/proc/[pid]/fd下面显示fd=27的IO为socket

解决办法

最后检查代码发现代码中有多出创建了ros::NodeHandle,导致出现了问题,传入一个ros::NodeHandle后问题得到解决