On Tue, Feb 15, 2011 at 6:30 PM, Chuck Remes <[email protected]> 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
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to