[zeromq-dev] need help with linux platform

Dhammika Pathirana dhammika at gmail.com
Wed Feb 16 07:01:45 CET 2011


On Tue, Feb 15, 2011 at 6:30 PM, Chuck Remes <cremes.devlist at mac.com> wrote:
>
> On Feb 15, 2011, at 7:54 PM, Chuck Remes wrote:
>
>>
>> On Feb 15, 2011, at 7:41 PM, Dhammika Pathirana wrote:
>>
>>>> Assertion failed: new_sndbuf > old_sndbuf (mailbox.cpp:183)
>>>>
>>>>
>>>> new_sndbuf = 10485760, old_sndbuf = 10485760
>>>>
>>>
>>> Is it failing on last check?
>>> new_sndbuf = 4 * old_sndbuf, is that correct?
>>
>> Right, the assertion is verifying that new_sndbuf is greater than old_sndbuf. When the buffer expansion fails, the assertion triggers.
>
>
> So, it's trying to expand the buffer past 10MB and fails. The buffer starts out at 512k (new default I set) and grows very rapidly. What kind of data is 0mq putting on this internal socket that could grow to this size so quickly?
>

Initial buffer is probably 256k, getsockopt() doubles this value.
Each command is about ~48B, so there's about ~80k commands backlog.
I don't know how we generate so many commands.


> I did track down the code in this component that appears to trigger it. It's publishing as fast as it can to a PUB socket. The socket is allocated with its default settings (HWM, etc) so it should be able to grow to the size of memory if the subscribers are too slow. This box has 12GB RAM and is nowhere near its limit.
>
> Suggestions?
>

We have to either block on send() or return EAGAIN, but these are not
trivial changes :-(


Dhammika



More information about the zeromq-dev mailing list