<div dir="ltr">It is not zeromq, its TCP, when you have 10K open connections you are using 10K file descriptors, there is no wonder here, that how TCP works. HAProxy and nginx for example do the same, or any webserver, if you want to support 10K concurrent connections you must increase the maximum sockets per application. <div><br></div><div>Take a look a the accept socket docs:</div><div><br></div><div><a href="http://man7.org/linux/man-pages/man2/accept.2.html">http://man7.org/linux/man-pages/man2/accept.2.html</a><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 19, 2016 at 7:12 PM, Alexander Poddey <span dir="ltr"><<a href="mailto:alexander.poddey@gmx.net" target="_blank">alexander.poddey@gmx.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hmm,<br>
<br>
on linux, the number of file descriptors per process is limited (typically<br>
to 1024). The total limit on my machine (kernel limit is ~734 000 opened<br>
files).<br>
<br>
This means a process can accept only 1024 connections?!?<br>
<br>
I can tweak the limit as super user of that machine; this however is no good<br>
solution.<br>
Think of my agent simulation running on a server where I'm not root. Then<br>
each process can accept only 1024 connections which is way to few...<br>
<br>
I wonder why zmq needs a file descriptor per connection...<br>
<span class="HOEnZb"><font color="#888888"><br>
Alexander<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
Doron Somech wrote:<br>
<br>
> I'm  not sure I  understand,  each file descriptor is a socket.  When<br>
> zeromq accept tcp socket another file descriptor is created. OS should be<br>
> able to manage thousands and tens of thousand open descriptor.<br>
><br>
> On Jul 19, 2016 6:56 PM, "Alexander Poddey" <<a href="mailto:alexander.poddey@gmx.net">alexander.poddey@gmx.net</a>><br>
> wrote:<br>
><br>
>><br>
>> Essentially, the question is:<br>
>> why does ZMQ consume file descriptors at all?<br>
>><br>
>><br>
>><br>
>><br>
>> > Hi,<br>
>> ><br>
>> > I have a setup in C++ on linux where a master process is setting up a<br>
>> > ZMQ_ROUTER and then forks many child processes, which then connect to<br>
>> that<br>
>> > router (tcp protocol).<br>
>> > Whenever a child zmq_connect's to the master, a file descriptor is<br>
>> > occupied (and assigned to the master process). They get free'ed fine<br>
>> > when the connection is close.<br>
>> ><br>
>> > This however limits the number of interacting processes to the number<br>
>> > of allowed file descriptors (per process). For me (linux), this<br>
>> > currently is 1024, which is way to small for my intended use<br>
>> > (multi-agent / swarm simulation).<br>
>> ><br>
>> > Can I prevent this behaviour?<br>
>> > In my mesaging architecture, each agent connects to 6 sockets, so with<br>
>> 100<br>
>> > agents I end up with 600 occupied file descriptors :-(<br>
>> ><br>
>> > Alexander<br>
>> ><br>
>> ><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" rel="noreferrer" target="_blank">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a><br>
>><br>
>><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" rel="noreferrer" target="_blank">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a><br>
<br>
<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" rel="noreferrer" target="_blank">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a></div></div></blockquote></div><br></div>