[erlang-questions] squeezing performance out of cowboy - how?

Loïc Hoguin <>
Mon Sep 9 19:24:25 CEST 2013


That's archlinux with no change to sysctl (other than swappiness but 
that has no impact on that test at all) with the erlang from archlinux 
packages (which is a little more optimized than what you get by default 
when compiling from source, but not *that* much, it's closer to +25%).

Try it I guess, but I'm confident you can do the same for Ubuntu. The 
only real difference is up to date packages and next to no distro 
specific patches on archlinux.

On 09/09/2013 06:37 PM, Alex Babkin wrote:
> Hi Loic, it would be great to reproduce your req/s numbers.
> Do you mind sharing your sysctl.config?
> What distro/version of linux are you using?
> Thanks for the link, the setup directions in the article are a bit outdated i think
>
> Sent from my iPhone
>
> On Sep 9, 2013, at 3:03 AM, Loïc Hoguin <> wrote:
>
>> Yes it can. And at a higher rate too if I close transmission. httperf gives similar results.
>>
>> On 09/09/2013 01:29 AM, Alex Babkin wrote:
>>> Thanks for reply Loic
>>>
>>> it seems that in my case i simply run out of num of open connections
>>> limit, and this happens after about 5-10 sec of running at 1000 req/s. I
>>> tried running as root and this seemed to gave me higher limit of
>>> connections, so i am able to sustain 500 req/s for at least 15 min
>>>
>>> I haven't tried siege yet, but can you actually sustain this rate of
>>> ~5000 req/s for around 15 min and not just 5 sec? (just curious)
>>>
>>> Alex
>>>
>>>
>>>
>>> On Sun, Sep 8, 2013 at 5:25 PM, Loïc Hoguin <
>>> <mailto:>> wrote:
>>>
>>>     Works fine for me. Quick testing on my laptop with 'connection: close':
>>>
>>>     % siege -b -c 500 -t 5s http://localhost:8080
>>>     ** SIEGE 3.0.1
>>>     ** Preparing 500 concurrent users for battle.
>>>     The server is now under siege...
>>>     Lifting the server siege...      done.
>>>
>>>     Transactions:                  24906 hits
>>>     Availability:                 100.00 %
>>>     Elapsed time:                   4.20 secs
>>>     Data transferred:               3.23 MB
>>>     Response time:                  0.08 secs
>>>     Transaction rate:            5930.00 trans/sec
>>>     Throughput:                     0.77 MB/sec
>>>     Concurrency:                  453.53
>>>     Successful transactions:       24906
>>>     Failed transactions:               0
>>>     Longest transaction:            3.09
>>>     Shortest transaction:           0.00
>>>
>>>     Did you increase the maximum number of fd on your system?
>>>     Considering your errors it's what comes to mind first.
>>>
>>>     This series of tutorials go through configuring this and tweaking
>>>     your system some more with sysctl:
>>>     http://www.metabrew.com/__article/a-million-user-comet-__application-with-mochiweb-__part-1
>>>     <http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1>
>>>
>>>     If sysctl doesn't do it, look at ulimit also.
>>>
>>>     If that's not it, check that you haven't modified the number of
>>>     acceptors to some huge number that doesn't make any sense, leave it
>>>     at around 100.
>>>
>>>
>>>     On 09/08/2013 11:14 PM, Alex Babkin wrote:
>>>
>>>         Hi
>>>
>>>         Was trying to load test my cowboy based websever with tsung and
>>>         httperf,
>>>         and it seems like i'm unable to squeeze out more than 200 req/s from
>>>         even the rest_hello_world example app.
>>>
>>>         Are there any resources on how erlang/cowboy/linux should be
>>>         configured
>>>         for optimal req/s numbers?
>>>
>>>         i tried ubuntu 12.04, 13.04
>>>         erlang vers R15B01, R16B01
>>>         cowboy master and 0.8
>>>         tried it on laptop (older macbook pro) and a powerful core7 blade
>>>
>>>         and still, get timeout errors in httperf or errors like below in
>>>         tsung
>>>         when trying to pound the server with as low as 300 req/s:
>>>         stats: error_connect_eaddrinuse 1320 10836
>>>         stats: error_abort_max_conn_retries 378 378
>>>
>>>         also tried playing around with settings like these while
>>>         starting the
>>>         server, with no apparent difference:
>>>            +K true -smp enable +swt low +spp true +P 512000 -env
>>>         ERL_MAX_PORTS
>>>         1000000
>>>
>>>         Thanks in advance
>>>         Alex
>>>
>>>
>>>         _________________________________________________
>>>         erlang-questions mailing list
>>>          <mailto:>
>>>         http://erlang.org/mailman/__listinfo/erlang-questions
>>>         <http://erlang.org/mailman/listinfo/erlang-questions>
>>>
>>>
>>>
>>>     --
>>>     Loďc Hoguin
>>>     Erlang Cowboy
>>>     Nine Nines
>>>     http://ninenines.eu
>>
>>
>> --
>> Loïc Hoguin
>> Erlang Cowboy
>> Nine Nines
>> http://ninenines.eu


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



More information about the erlang-questions mailing list