I am trying to run OpenSplice DDS with the shared memory configuration and am creating a large topic. When I do this I am getting an error “Out of memory: unable to create message for Topic”. What could be causing this?
Out of memory: unable to create message for Topic
You are trying to create a large object in your OpenSplice application using shared memory configured with the following database attributes:
<Database> <Size>10485760</Size> </Database>
And receive an error similar to the following:
Context : DDS::OpenSplice::FooDataWriter_impl::write
Date : Fri Jan 27 15:58:49 2017
Node : D160026
Process : pong.exe <5168>
Thread : 5740
Internals : FooDataWriter_impl.cpp/222/6.6.3/022e632/ecfd2d0
Report : Out of memory: unable to create message for Topic ‘PP_min_topic’.
Internals : u_writeWithHandleAction/u_writer.c/306/772/1485500329.975158900
Report : Memory claim denied for large object of 10485776 bytes: request exceeds available matching resources…
Here we are attempting to create an object of size 10MB, with a Database of size 10MB and a default Threshold. The Threshold attribute specifies how much memory must remain free in the system. So if the database was of size 10MB and the object you were creating was of size 10Mb but the Threshold was, for example, 1MB (the default), there is actually only 9MB of space available for the object and therefore creation will fail.
In order to create an object of size 10MB the Database size should be a multiple of 10MB and Threshold should be a minimum of and multiple of 10MB.
<Database> <Size>104857600</Size> <Threshold>10485760</Threshold> </Database>
So the Threshold is 10MB and database is 100MB. This should allow your object creation. In reality it is a better idea to increase the database size and Threshold value even further if you are using such large objects.