[erlang-questions] Cowboy , Concurrency , Tuning

Loïc Hoguin essen@REDACTED
Wed Oct 10 10:36:17 CEST 2012


On 10/10/2012 04:02 AM, AD wrote:
> hello,

Hey,

>   I currently have a SockJS websocket implementation sitting on top of
> cowboy.  We have been going through some tuning/concurrency testing and
> we have improved our results drastically by increasing
>
> ERL_MAX_PORTS to 64000
> +P parameter to a very high number , around 128000
> Kernel tuning
>
>   With this config on a medium VM we have been able to successfully get
> to around 60,000 connections, up from 4096 so we are headed in the right
> direction :-)

Well then with the above configuration you're at about the maximum 
concurrent connections you can get. If you increase ERL_MAX_PORTS and +P 
even more Cowboy shouldn't have any trouble giving you even better results.

>   MY next question is with Cowboy tuning.  I notice that the default
> max_connections parameter on the TCP transport is 1024 if not set, but I
> am not hitting this issue.  What is the right way to tune NBAcceptor
> pool and the the max_connections setting for the acceptor ?

NBAcceptor shouldn't be too low but shouldn't be too high either. I 
found 100 to be a good values but it really depends on how many 
connections come at once, how many cores you have, how many concurrent 
connections you expect, and so on.

>   Right now my start_listener is simply
>
> cowboy:start_listener(my_http_listener, 200,
>       cowboy_tcp_transport, [{port, ?COWBOY_HTTP_PORT}],
>       cowboy_http_protocol, [{dispatch, Routes}]
>      ).
>
> but i have seen some examples with
>
> cowboy:start_listener(my_http_listener, 200,
>       cowboy_tcp_transport, [{port, ?COWBOY_HTTP_PORT},
> */{max_connections, infinity}/* ],
>       cowboy_http_protocol, [{dispatch, Routes}]
>      ).

If you're using Cowboy 0.6.1 or below and looking for performance, you 
should set max_connections to infinity. If you're using master, you can 
let it at the default value.

Websocket connections are not counted in that number. All HTTP 
connections are though, so you might want to look at cowboy_listener to 
see how to remove the connection from the count (varies depending on 
your version).

-- 
Loïc Hoguin
Erlang Cowboy
Nine Nines
http://ninenines.eu



More information about the erlang-questions mailing list