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
