mcollina / autocannon

fast HTTP/1.1 benchmarking tool written in Node.js
MIT License
7.86k stars 326 forks source link

[Question]: not able to generate more than ~20 RPS #490

Closed pawelgur closed 1 year ago

pawelgur commented 1 year ago

I am trying to understand how many RPS my nodejs application can handle before degrading and eventually failing.

I do this by running separate Autocannon tests against an endpoint increasing both connection count and overall connection rate with each run. After I've reached around ~20 RPS, I am not able to increase load regardless of options I provide (tried various combinations, including -C, increasing worker count, pipelining, using amount, etc. ).

E.g. npx autocannon -R 40 -c 40 -d 60 https://someurl --renderStatusCodes is generating (or at least reporting) similar RPS as npx autocannon -R 20 -c 20 -d 60 https://someurl --renderStatusCodes.

Is this expected? If yes, is it possible to force Autocannon to generate more load?

mcollina commented 1 year ago

Thanks for reporting!

Can you provide steps to reproduce? We often need a reproducible example, e.g. some code that allows someone else to recreate your problem by just copying and pasting it. If it involves more than a couple of different file, create a new repository on GitHub and add a link to that.

pawelgur commented 1 year ago

I was able to reproduce similar behavior on dummy nodejs app: https://github.com/pawelgur/nodejs-load-test (please see readme for setup instructions).

Autocannon results for this app on my machine (based on autocannon output):

  1. npx autocannon -R 15 -c 15 -d 30 http://localhost:3000/test --renderStatusCodes : resulted in 15RPS as expected
  2. npx autocannon -R 20 -c 20 -d 30 http://localhost:3000/test --renderStatusCodes : ~19 RPS (vs 20 expected)
  3. npx autocannon -R 25 -c 25 -d 30 http://localhost:3000/test --renderStatusCodes: ~21 RPS (vs 25 expected)
  4. npx autocannon -R 30 -c 30 -d 30 http://localhost:3000/test --renderStatusCodes 21RPS (vs 30 expected)

I confirmed on application side that autocannon does not send enough requests. When using amount instead of duration, test runs longer but RPS still stays at similar level, e.g.:

Note: max RPS when this problem occurs likely depends on specific machine, might need higher -R and -c values.

Running on Windows 10, node v16.17.0, I7

mcollina commented 1 year ago

This looks correct, as your application cannot likely perform more than 21RPS.

pawelgur commented 1 year ago

Is it possible to "force" autocannon to generate specific RPS count regardless if application can handle it or not?

mcollina commented 1 year ago

No, you'd need to use a different tool to perform a stress test. apache2 is great in that regard.