[erlang-questions] Cowboy vs Misultin

Andy W. Song <>
Wed Jun 22 17:08:24 CEST 2011


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 <> 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:>> 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>>},
> >     >  {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:>>> 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:>>> wrote:
> >     >
> >     >         Missed one attachment.
> >     >
> >     >
> >     >         On Wed, Jun 1, 2011 at 8:21 PM, Andy W. Song
> >     < <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:>>> 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:>
> >     > http://erlang.org/mailman/listinfo/erlang-questions
> >
> >
> >     --
> >     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/bb52376b/attachment.html>


More information about the erlang-questions mailing list