[erlang-questions] UDP concurrent server

Bogdan Andu bog495@REDACTED
Wed Dec 9 14:02:07 CET 2015

Seems a good idea but also a dangerous one.

I think I will stay with receiving {udp, Socket, Host, Port, Bin} messages
in controlling process and dispatch from there.

But now I face another problem...
I have :

handle_info({udp, Socket, Host, Port, Bin}, State)  ->
    {noreply, State};

In a few minutes the memory allocated to binary increases to ~ 500MB
by running the command:

fmpeg -f lavfi -i aevalsrc="sin(40*2*PI*t)" -ar 8000 -f mulaw -f rtp rtp://

It seems that the Bins are accumulated in the process memory area, an never
are deallocated
unless the process is killed, which is not an option.

How can I manage this and to avoid running out of memory in a matter of
minutes ?

If I change the clause to:
handle_info({udp1, Socket, Host, Port, Bin}, State) ->

memory stays at 190KB.

So as long as the process receives the packet, this is accumulated in
binary memory are
and never deallocated.

On Wed, Dec 9, 2015 at 2:23 PM, Benoit Chesneau <bchesneau@REDACTED> wrote:

> On Wed, Dec 9, 2015 at 1:11 PM Sergej Jurečko <sergej.jurecko@REDACTED>
> wrote:
>> On Wed, Dec 9, 2015 at 12:59 PM, Benoit Chesneau <bchesneau@REDACTED>
>> wrote:
>>> You can if you tell to the udp socket to reuse the port:
>>> https://github.com/refuge/rbeacon/blob/master/src/rbeacon.erl#L414-L425
>>> If you do this any process will be able to reuse it and send/recv to it.
>> This enables you to call gen_udp:open for port X from multiple processes.
>> Unfortunately as long as first socket is alive, all traffic will go there.
>> So it's just a reliability improvement (if first process goes down), but
>> not a scalability improvement.
> Well it would allows you to open different socket for the same ports for
> recv. Normally the threads should compete to get the data according to
> https://lwn.net/Articles/542629/
> So until a process is on another thread or CPU it should increase the
> concurrency.
> - benoît
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20151209/619f581c/attachment.htm>

More information about the erlang-questions mailing list