Hi all,<div><br></div><div>I would suggest a twofold approach. First off, the process should know its maxfd value (in linux its a call to getrlimit, but i can't remember if that is posix compliant). If the number of open sockets is at maxfd, try to setrlimit maxfd to a higher number. As long as the soft limit is not set to the hard limit, this will work. </div>
<div><br></div><div>Second, once at the hard limit for maxfd don't try to accept until open fds is less than maxfd.</div><div><br></div><div>In Linux and the BSD maxfd is a kernel parameter that can be tweaked somewhat at runtime, and somewhat at compile time, so there is a necessary component of sysadmin cooperation.</div>
<div><br></div><div>I really don't know if the above approach will work or not, just that it is what I would try first.</div><div><br></div><div>Regards,</div><div>Erich</div><div><br><div class="gmail_quote">On Wed, Apr 29, 2009 at 11:27 AM, Martin Sustrik <span dir="ltr"><<a href="mailto:sustrik@fastmq.com">sustrik@fastmq.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi,<br>
<br>
I was just told that when EMFILE or ENFILE error (the socket limit is<br>
exceeded) is returned from accept the connection isn't purged from the<br>
listening queue.<br>
<br>
The consequence is that polling on the listening socket signalises that<br>
there's a pending connection, however, there's no way to accept it<br>
unless some sockets are closed in the meantime.<br>
<br>
Such behaviour results in a busy loop desperately trying to accept the<br>
connection, ultimately getting the CPU load to 100%.<br>
<br>
Any tips how to solve the problem?<br>
Martin<br>
_______________________________________________<br>
zeromq-dev mailing list<br>
<a href="mailto:zeromq-dev@lists.zeromq.org">zeromq-dev@lists.zeromq.org</a><br>
<a href="http://lists.zeromq.org/mailman/listinfo/zeromq-dev" target="_blank">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a><br>
</blockquote></div><br></div>