现象
线程中有一个由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
后问题得到解决