[erlang-questions] Cowboy vs Misultin

Andy W. Song <>
Wed Jun 22 17:30:01 CEST 2011


I can roughly feel it after about 15K~20K.

On Wed, Jun 22, 2011 at 11:24 PM, Loïc Hoguin <> wrote:

> Odd.
>
> I'll try to run the client you wrote to reproduce whenever I receive the
> hardware I'm waiting for. Not sure what could do this though. Do you
> have an idea of what's the number of connections before it starts
> slowing down?
>
> On 06/22/2011 05:08 PM, Andy W. Song wrote:
> > Thanks for the link. I removed the send_interval call and retested but
> > it didn't make much of a difference. It still takes about 7 and half
> > minutes to create 100K connections. During creation I can see several
> > time outs  from client side. And the creation speed gets slower when the
> > number of connections gets higher. Although the average CPU usage
> > doesn't change much.
> >
> > After creation, with 1.5MB/s traffic, the CPU usage is still about the
> > same as before which is 30%.
> >
> > Cheers.
> > Andy
> >
> > On Wed, Jun 22, 2011 at 10:34 PM, Loïc Hoguin <
> > <mailto:>> wrote:
> >
> >     Memory usage sounds a bit high for cowboy_http_req:compact. But maybe
> >     not. Good point though it's already in the examples just like
> hibernate.
> >     My bad.
> >
> >     On the other hand if you have a timer per connection it's definitely
> not
> >     going to scale, timers are very slow so having 100k timers isn't
> going
> >     to work well. Remove the send_interval and it should work a lot
> better.
> >
> >     For future reference:
> >
> http://www.erlang.org/doc/efficiency_guide/commoncaveats.html#id58959
> >
> >     Waiting for yet another comparison, have fun. :)
> >
> >     On 06/22/2011 04:27 PM, Andy W. Song wrote:
> >     > I actually didn't patch. I want to keep my change as small as
> >     possible.
> >     > I will remove that send_interval and test it again. Sorry I didn't
> pay
> >     > much attention about this.
> >     >
> >     > BTW, how can you tell I used or did not use
> >     cowboy_http_req:compact? And
> >     > I see hibernate is already the default behavior, isn't it?
> >     >
> >     > Thanks
> >     > Andy
> >     >
> >     > On Wed, Jun 22, 2011 at 10:06 PM, Loïc Hoguin <
> >     <mailto:>
> >     > <mailto: <mailto:>>> wrote:
> >     >
> >     >     Hello,
> >     >
> >     >     Did you fix the many issues in your cowboy application code I
> >     reported
> >     >     in my previous emails? I see you removed the receive after from
> >     >     misultin, did you remove it from cowboy too? You could very
> >     well just be
> >     >     measuring Erlang's timer modules bad performance there.
> >     >
> >     >     Also I see you're not using cowboy_http_req:compact and the
> >     hibernate
> >     >     option for cowboy that is doing it properly (unlike your
> patch).
> >     >
> >     >     And again, you should probably come to IRC and ask for advice
> >     from the
> >     >     other people benchmarking it.
> >     >
> >     >     Cheers.
> >     >
> >     >     On 06/22/2011 03:14 PM, Andy W. Song wrote:
> >     >     > OK, the competition comes again. I finally wrote a client
> that
> >     >     performs
> >     >     > decently. It's here
> >     >     <https://github.com/awsong/Golang-WebSocket-Client>.
> >     >     >
> >     >     > I tested my previous Cowboy first( I changed send_interval
> from
> >     >     1000 to
> >     >     > 900000 of line 64 of src/websocket_handler.erl in
> >     cowboy_examples ).
> >     >     > Here is the version:
> >     >     > *Cowboy_examples*: 343d002 Initial commit with a default and
> >     websocket
> >     >     > handler.
> >     >     > *Cowboy*: 5d69825 Add a max_connections transport option,
> >     Mon May 9
> >     >     > 22:01:31 2011
> >     >     >
> >     >     > The command line I use on the client is "./conn -c 10000 -n
> >     10". It'll
> >     >     > create 100K connections, 10K per IP to the server. It takes
> >     about
> >     >     7 and
> >     >     > half minutes to finish creating these connections. During the
> >     >     creation,
> >     >     > server CPU usage is about 110%(dual core), client cpu usage
> is
> >     >     under 20%.
> >     >     >
> >     >     > Server memory usage(Cowboy residence memory) :
> >     >     > Right after Cowboy starts: 525M
> >     >     > After 100K connection established: 1842M
> >     >     > After 5M packets passed: 2824M
> >     >     > After 9M packets passed: 3231M
> >     >     > After 87.7 M packets passed, 5746M
> >     >     > [{total,4155518040 <tel:4155518040> <tel:4155518040
> >     <tel:4155518040>> <tel:4155518040 <tel:4155518040>
> >     >     <tel:4155518040 <tel:4155518040>>>},
> >     >     >  {processes,1701318856},
> >     >     >  {processes_used,1701299096},
> >     >     >  {system,2454199184},
> >     >     >  {atom,497457},
> >     >     >  {atom_used,482279},
> >     >     >  {binary,1787851232},
> >     >     >  {code,4041219},
> >     >     >  {ets,41231176}]
> >     >     > There seems a memory leak. If I don't stop, the memory usage
> >     will keep
> >     >     > going higher. 40% CPU, 1.5 MB/s traffic.
> >     >     >
> >     >     > *Latest Cowboy and Cowboy_examples* (same send_interval
> >     change). It
> >     >     > takes about 7 and half minutes to finish creating 100K
> >     connections.
> >     >     > During the creation, server CPU usage is about 110%(dual
> >     core), client
> >     >     > cpu usage is under 20%. After 158.9M packets passed, 1464M
> >     residence
> >     >     > memory used, 30% CPU, 1.5 MB/s traffic, .
> >     >     >
> >     >     > *Latest Misultin* from github, with patch (see attachment):
> >     >     > It takes about 45s to finish creating 100K connections,
> during
> >     >     creation
> >     >     > cpu usage is 120%. After creation, residence memory usage is
> >     >     2684M. And
> >     >     > it goes down slowly to 1416M after 40M packets are passed,
> cpu
> >     >     usage is
> >     >     > about 50%
> >     >     >
> >     >     > Another thing worth to note is that when I hit CTRL-C on the
> >     client
> >     >     > side, misultin will quickly destroy the connections and
> >     release memory
> >     >     > and go back to normal. But Cowboy will consume almost all
> >     the cpu time
> >     >     > and stay there for a long time (I didn't have the patience
> >     to measure
> >     >     > how long, so just hit ctrl-c to quick erlang).
> >     >     >
> >     >     > Cheers
> >     >     > Andy
> >     >     >
> >     >     >
> >     >     > On Wed, Jun 1, 2011 at 8:26 PM, Andy W. Song
> >     < <mailto:>
> >     >     <mailto: <mailto:>>
> >     >     > <mailto: <mailto:>
> >     <mailto: <mailto:>>>> wrote:
> >     >     >
> >     >     >     BTW, the latest version uses less memory too, about 3.2G
> >     for 200K
> >     >     >     connections.
> >     >     >
> >     >     >
> >     >     >     On Wed, Jun 1, 2011 at 8:23 PM, Andy W. Song
> >     >     < <mailto:>
> >     <mailto: <mailto:>>
> >     >     >     <mailto: <mailto:>
> >     <mailto: <mailto:>>>> wrote:
> >     >     >
> >     >     >         Missed one attachment.
> >     >     >
> >     >     >
> >     >     >         On Wed, Jun 1, 2011 at 8:21 PM, Andy W. Song
> >     >     < <mailto:>
> >     <mailto: <mailto:>>
> >     >     >         <mailto: <mailto:>
> >     <mailto: <mailto:>>>> wrote:
> >     >     >
> >     >     >             I tested out the latest Misultin with this
> >     change, CPU
> >     >     usage
> >     >     >             is about 2 to 3 percent lower.
> >     >     >
> >     >     >             With the attached Misultin package, I can still
> >     reproduce
> >     >     >             the large packet problem.
> >     >     >
> >     >     >             With latest version, Misultin doesn't report any
> >     >     error. But
> >     >     >             it doesn't reply to the client either. Seems it
> >     just drops
> >     >     >             the packet. Another attached file is the tcpdump
> >     result.
> >     >     >
> >     >     >             I will try Mochiweb later just to compare.
> >     >     >
> >     >     >
> >     >     >             On Wed, Jun 1, 2011 at 12:09 AM, Roberto
> Ostinelli
> >     >     >             <
> >     <mailto:> <mailto:
> >     <mailto:>>
> >     >     <mailto: <mailto:>
> >     <mailto: <mailto:>>>> wrote:
> >     >     >
> >     >     >
> >     >     >                 On May 31, 2011, at 12:54 PM, Andy W. Song
> >     wrote:
> >     >     >
> >     >     >>                 Would you mind testing it using my C
> >     client? Search
> >     >     >>                 "->len" and give
> >     >     >>                 it a value between 1500 and 2000, hopefully
> >     >     you'll see
> >     >     >>                 the result I
> >     >     >>                 saw.
> >     >     >>
> >     >     >>                 Regards
> >     >     >>                 Andy
> >     >     >
> >     >     >                 Hi Andy,
> >     >     >
> >     >     >                 will do that.
> >     >     >
> >     >     >                 Meanwhile, I've added an undocumented option,
> >     >     >                 {ws_no_header, true} so that headers are not
> >     >     duplicated
> >     >     >                 in the record and should use less memory.
> >     plus, I've
> >     >     >                 optimized binary code for websockets.
> >     >     >
> >     >     >                 can you please retry the test so we have a
> >     matter of
> >     >     >                 comparison?
> >     >     >
> >     >     >                 the only thing you need to change is to add
> this
> >     >     option
> >     >     >                 in misultin initialization, i.e.:
> >     >     >
> >     >     >                 % start misultin http server
> >     >     >                 start(Port) ->
> >     >     >                 misultin:start_link([
> >     >     >                  *{ws_no_header, true},*
> >     >     >                 {port, Port}, {loop, fun(Req) ->
> >     handle_http(Req,
> >     >     Port)
> >     >     >                 end},
> >     >     >                 {ws_loop, fun(Ws) -> handle_websocket(Ws)
> end},
> >     >     >                 {ws_autoexit, false}
> >     >     >                 ]).
> >     >     >
> >     >     >                 please let me know...
> >     >     >
> >     >     >                 r.
> >     >     >
> >     >     >
> >     >     >
> >     >     >
> >     >     >             --
> >     >     >
> >     >     ---------------------------------------------------------------
> >     >     >             有志者,事竟成,破釜沉舟,百二秦关终属楚
> >     >     >             苦心人,天不负,卧薪尝胆,三千越甲可吞吴
> >     >     >
> >     >     >
> >     >     >
> >     >     >
> >     >     >         --
> >     >     >
> >     >     ---------------------------------------------------------------
> >     >     >         有志者,事竟成,破釜沉舟,百二秦关终属楚
> >     >     >         苦心人,天不负,卧薪尝胆,三千越甲可吞吴
> >     >     >
> >     >     >
> >     >     >
> >     >     >
> >     >     >     --
> >     >     >
> >     ---------------------------------------------------------------
> >     >     >     有志者,事竟成,破釜沉舟,百二秦关终属楚
> >     >     >     苦心人,天不负,卧薪尝胆,三千越甲可吞吴
> >     >     >
> >     >     >
> >     >     >
> >     >     >
> >     >     > --
> >     >     >
> ---------------------------------------------------------------
> >     >     > 有志者,事竟成,破釜沉舟,百二秦关终属楚
> >     >     > 苦心人,天不负,卧薪尝胆,三千越甲可吞吴
> >     >     >
> >     >     >
> >     >     >
> >     >     > _______________________________________________
> >     >     > erlang-questions mailing list
> >     >     > 
> >     <mailto:>
> >     <mailto:
> >     <mailto:>>
> >     >     > http://erlang.org/mailman/listinfo/erlang-questions
> >     >
> >     >
> >     >     --
> >     >     Loïc Hoguin
> >     >     Dev:Extend
> >     >
> >     >
> >     >
> >     >
> >     > --
> >     > ---------------------------------------------------------------
> >     > 有志者,事竟成,破釜沉舟,百二秦关终属楚
> >     > 苦心人,天不负,卧薪尝胆,三千越甲可吞吴
> >     >
> >
> >
> >     --
> >     Loïc Hoguin
> >     Dev:Extend
> >
> >
> >
> >
> > --
> > ---------------------------------------------------------------
> > 有志者,事竟成,破釜沉舟,百二秦关终属楚
> > 苦心人,天不负,卧薪尝胆,三千越甲可吞吴
> >
>
>
> --
> Loïc Hoguin
> Dev:Extend
>



-- 
---------------------------------------------------------------
有志者,事竟成,破釜沉舟,百二秦关终属楚
苦心人,天不负,卧薪尝胆,三千越甲可吞吴
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110622/ca65a984/attachment.html>


More information about the erlang-questions mailing list