Benchmarking Express.js App

420 views
Skip to first unread message

Gustavo Machado

unread,
Nov 2, 2012, 4:41:37 PM11/2/12
to nod...@googlegroups.com
Hi,

I would like to start a series of benchmarks of a few apps we have running with node.js so I decided to run a baseline benchmark on a vanilla express.js application with the following route:

app.get('/', function ( req, res ) {
  res.end("hello world");
});

I ran ApacheBench like this:
.\ab.exe -n 100 http://one.org:3000/
.\ab.exe -n 100 -c 10 http://one.org:3000/
.\ab.exe -n 100 -c 100 http://one.org:3000/

(one.org is mapped in my hosts file to an EC2 Large instance)

I repeated the tests several times, and results were pretty consistent:

So my questions are, do these numbers make sense? And is this suggesting that in the last test one request was waiting for 24 seconds? Why?

Is there a better way to benchmark an express.js app?

Thanks,
Gustavo

tjholowaychuk

unread,
Nov 3, 2012, 1:09:24 AM11/3/12
to nodejs
yikes those numbers are terrible something is really wrong there.
secondly responses will be much slower if you dont specify
the Content-Length, (use res.send('hello world')), but yikes yeah
something is very wrong with that, normally you would have to
explicitly try to make express that slow, so either the network hops
are brutal or something else is wrong

On Nov 2, 1:42 pm, Gustavo Machado <machad...@gmail.com> wrote:
> Hi,
>
> I would like to start a series of benchmarks of a few apps we have running
> with node.js so I decided to run a baseline benchmark on a vanilla
> express.js application with the following route:
>
> app.get('/', function ( req, res ) {
>   res.end("hello world");
>
> });
>
> I ran ApacheBench like this:
> .\ab.exe -n 100http://one.org:3000/
> .\ab.exe -n 100 -c 10http://one.org:3000/
> .\ab.exe -n 100 -c 100http://one.org:3000/

Joel Rolfe

unread,
Nov 3, 2012, 10:39:53 AM11/3/12
to nod...@googlegroups.com

Yeah, something is clearly wrong here - if you haven't already, you might use the express logger middleware to measure time spent server side handling the request.  Add something like this (this is what I'm using - modify your desired fields accordingly) to the beginning of your express middleware chain:

app.use(_express.logger(':remote-addr [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" [ :response-time ms ]'));

You'll have to look at individual requests on your stdout, but at 2 requests a second, this shouldn't be too hard ;). 
Reply all
Reply to author
Forward
0 new messages