无法找出资源不足错误的根本原因

Can't figure out the root cause of out of resources error

我有一个应用程序使用 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 策略文件的更改以避免此错误,其中 none 有效。

我想现在解决这个问题的最好方法是找出问题的根本原因,但是我遇到了困难,无法弄清楚它是否与 OS 相关,a内存泄漏,或者什么。

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

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

DynamicData() constructor for the com.rti.dds.dynamicdata.DynamicData object has a parameter called type of the class TypeCode and a parameter called property of the class 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,表示缓冲区没有最大大小。