13.1.4. Troubleshooting
这一部分旨在提供快速解决方案,以克服使用统计模块时最常见的问题。
13.1.4.1. 监控应用程序未接收任何统计数据
有时,尤其是在监控具有许多 DataWriters 和 DataReaders 的大型应用程序时,监控 Fast DDS 统计信息的应用程序可能不会收到任何数据。这通常是由于统计 DataWriters 的默认配置造成的,其中 push_mode 设置为 false(即 pull_mode),历史类型设置为 KEEP_LAST,并且历史深度设置为 10。在这种配置下,可能会发生以下情况:
- Fast DDS 将新样本添加到其中一个统计 DataWriter。
- DataWriter 通知 DataReader 可用该样本。
- DataReader 向 DataWriter 发送请求以“拉取”这些样本。
- 在请求到达 DataWriter 之前,同一 DataWriter 添加了一些新的统计样本,从而导致先前的样本被覆盖。
- 一旦请求到达 DataWriter,由于请求的样本已被覆盖,它们不再可用,因此 DataWriter 将通知 DataReader 有更新的样本存在。
- 循环重新开始。
克服这种情况最简单的方法是简单地增加 DataWriter 的历史深度,以创建一些缓冲区来响应请求:
<?xml version="1.0" encoding="utf-8"?>
<dds xmlns="http://www.eprosima.com">
<profiles>
<participant profile_name="statistics_domainparticipant_conf_xml_general_profile">
<rtps>
<propertiesPolicy>
<properties>
<!-- 激活各种 Fast DDS Statistics Module 数据写入器 -->
<property>
<name>fastdds.statistics</name>
<value>HISTORY_LATENCY_TOPIC;DISCOVERY_TOPIC;PHYSICAL_DATA_TOPIC</value>
</property>
</properties>
</propertiesPolicy>
</rtps>
</participant>
<!-- 所有统计数据写入器的通用配置 -->
<data_writer profile_name="GENERIC_STATISTICS_PROFILE">
<!-- 配置历史 QoS 为 KEEP_LAST 20 -->
<!-- 历史深度取决于用户应用程序约束(例如发布率) -->
<topic>
<historyQos>
<kind>KEEP_LAST</kind>
<depth>20</depth>
</historyQos>
</topic>
<!-- 启用拉取模式 -->
<propertiesPolicy>
<properties>
<property>
<name>fastdds.push_mode</name>
<value>false</value>
</property>
</properties>
</propertiesPolicy>
<!-- 设置持久性、可靠性和发布模式 -->
<qos>
<durability>
<kind>TRANSIENT_LOCAL</kind>
</durability>
<reliability>
<kind>RELIABLE</kind>
</reliability>
<publishMode>
<kind>ASYNCHRONOUS</kind>
</publishMode>
</qos>
</data_writer>
</profiles>
</dds>
注意
增加统计 DataWriters 的历史深度会影响内存使用,因为每个 DataWriter 的历史记录将预分配足够的空间,以容纳该数量的每个主题实例的样本。
内容由零声教学AI助手提供,问题来源于学员提问