在Dockercontainer中使用> 100%CPU的空闲ROS节点

时间:2018-07-24 06:13:09

标签: c++ docker cpu-usage ros

我已经构建/编写了几个在Docker容器中运行的ROS节点。它们是这样连接的:

create_data_node mqtt_bridge =>|broker|=> mqtt_bridge => processing_node
        master1/ pc1                        master2/pc2/dockercontainer

create_data_node可以满足您的期望-创建数据,然后将其发布到mqtt_bridge上,mqtt_bridge会将其发布到代理上。从那里(另一台PC上)的另一个mqtt_bridge接收数据并将其发布到processing_node,后者进行一些处理。工作流本身必须是这种方式,它可以在创建数据时算出来,而不是这个问题的一部分。

现在:我关闭create_data_node的那一刻,master2 / pc2上的所有设备都应进入空闲模式,因为没有数据输入,也没有调用回调。但是,此特定节点的CPU使用率> 100%,此外rosout也在使用〜150%。

processing_node上,我只是创建一个ros::Subscriber,然后使用ros::spin(),如下所示(摘录的示例):

int main(int argc, char** argv) {
    ros::init(argc, argv, DEFAULT_NODENAME);
    ros::NodeHandle n;

    ros::Subscriber sub = n.subscribe<messages::testmessage>("topic", 1000, callback);

    ros::spin();
    return 0;
}

据我了解,ros::spin()(与while(1) { ros::spinOnce();}相反,不应该进行空闲等待。在我的本地PC上,它工作正常(又称CPU使用率合理)-容器确实造成了这些问题但是。

所以我的问题很简单-是什么导致这种行为,我该怎么做才能防止这种情况发生?预先感谢!

0 个答案:

没有答案