【问题标题】:Can't figure out the root cause of out of resources error无法找出资源不足错误的根本原因
【发布时间】:2016-05-31 03:00:27
【问题描述】:

我有一个使用 RTI DDS 的应用程序,它使用dynamic data 来设置我的消息。

当我尝试在文件中发送 300kb 的字符串时,我收到以下错误代码:

com.rti.dds.infrastructure.RETCODE_OUT_OF_RESOURCES
    at com.rti.dds.util.Utilities.rethrow(Unknown Source) ~[nddsjava.jar:?]
    at com.rti.dds.infrastructure.RETCODE_ERROR.check_return_codeI(Unknown Source) ~[nddsjava.jar:?]
    at com.rti.dds.dynamicdata.DynamicData.set_string(Unknown Source) ~[nddsjava.jar:?]

我已经在他们的论坛上进行了搜索,并尝试了所有我能想到的对我的 QOS 策略文件的更改以避免此错误,但没有一个有效。

我认为现在解决此问题的最佳方法是找到问题的根本原因,但是我碰壁了,无法确定它是否与操作系统相关、内存泄漏或其他原因。

有谁知道是什么导致了我的 RTI DDS 出现这个问题?

【问题讨论】:

  • 当您调用DynamicData() 时,您传递了什么property 值作为第二个参数?
  • @ReinierTorenbeek 我知道你要说什么,因为我昨天想通了,但有点忙于发布答案,我正在为第二个参数做默认属性,所以我做了一个第二个属性的动态属性对象,设置为较大的大小,例如最大为 1mb,并且不再出现此错误。
  • 很高兴听到你解决了它。如果您发布答案,我会支持它;-)
  • @ReinierTorenbeek 会在午餐时间做。所以这不是一个懒惰的答案哈哈。

标签: resources messaging qos data-distribution-service


【解决方案1】:

在您的评论中,您表示您解决了问题。其他人了解它可能仍然有用,特别是考虑到情况取决于您使用的 Connext 版本。因此我的回答在这里。

com.rti.dds.dynamicdata.DynamicData 对象的DynamicData() 构造函数有一个名为type 的类TypeCode 的参数和一个名为property 的类DynamicDataProperty_t 的参数。后者配置新创建对象的行为,尤其是内存分配和资源限制。

显然,您使用值com.rti.dds.dynamicdata.DYNAMIC_DATA_PROPERTY_DEFAULT 作为property 参数。对于旧版本的 RTI 产品(5.2.0 之前),这意味着 buffer_max_size 属性设置为 65536 字节的值。这对您的对象来说还不够,结果是 RETCODE_OUT_OF_RESOURCES 异常。解决方案是传递您自己的属性对象实例化并将buffer_max_size 设置为足够大的值。

对于当前版本的产品,这不再是必需的。 buffer_max_size 的默认值现在是 ResourceLimitsQosPolicy.LENGTH_UNLIMITED,表示缓冲区没有最大大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2012-01-17
    • 2023-04-08
    • 2019-09-19
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多