the-benchmarker / web-frameworks

Which is the fastest web framework?
MIT License
6.91k stars 641 forks source link

Benchmarking test - statistical results #101

Closed OvermindDL1 closed 5 years ago

OvermindDL1 commented 6 years ago

So my new server is setup, nice and empty and ready to run tests on (for now), so I'm playing with it. :-)

8-core (16-hyperthreads), 3.7ghz, 16gigs ram (for now), etc... etc...

First, the current result sets that are currently built into this git project are not indicative of the actual through-put that a server can sustain as it always tests a simple iteration of command and how fast they complete rather then how long each request takes, the average, the longest a request took, etc... etc...

So I whipped up a quick script to test the statistical parts in far far greater detail than this current git HEAD does, these are the results for a set of servers. I used rust, crystal, go, python, elixir, and node for the servers, mostly because I haven't installed (or figured out how, depending) the rest of the stuff, plus these run the fastest overall. I did have an issue with server_python_japronto, it refused to run... The server_python_flask did not install flask, I had to do that manually, that should be fixed... japronto does not seem to be in pip, so it remained missing. I'll post the results here as I get them (it outputs markdown format so the posts will be a run with a bit of description at the top of each).

OvermindDL1 commented 6 years ago

It's quite fun watching all 16 hyperthreads get pegged to 100% I have to say. ^.^

First 'big' run was done at just 1s warmup and 1s test run time, so it is likely not accurate but is a quick way to make sure it is all working at least, the results:

Total Cores: 16 Processing servers:

Processing: bin/server_rust_iron

Shutting down server: bin/server_rust_iron

Processing: bin/server_rust_nickel

Shutting down server: bin/server_rust_nickel

Processing: bin/server_rust_rocket

Shutting down server: bin/server_rust_rocket

Processing: bin/server_crystal_kemal

Shutting down server: bin/server_crystal_kemal

Processing: bin/server_crystal_raze

Shutting down server: bin/server_crystal_raze

Processing: bin/server_crystal_router_cr

Shutting down server: bin/server_crystal_router_cr

Processing: bin/server_go_echo

Shutting down server: bin/server_go_echo

Processing: bin/server_go_fasthttprouter

Shutting down server: bin/server_go_fasthttprouter

Processing: bin/server_go_gin

Shutting down server: bin/server_go_gin

Processing: bin/server_go_gorilla_mux

Shutting down server: bin/server_go_gorilla_mux

Processing: bin/server_go_iris

Shutting down server: bin/server_go_iris

Processing: bin/server_python_flask

Shutting down server: bin/server_python_flask

Processing: bin/server_python_sanic

Shutting down server: bin/server_python_sanic

Processing: bin/server_elixir_phoenix

Shutting down server: bin/server_elixir_phoenix

Processing: bin/server_elixir_plug

Shutting down server: bin/server_elixir_plug

Processing: bin/server_node_clusterexpress

Shutting down server: bin/server_node_clusterexpress

Processing: bin/server_node_express

Shutting down server: bin/server_node_express

Path URL Errors Total Requests Count Total Requests Throughput Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 65104 6.71MB 8.18k 1.18k 10.10k 62.50% 13.82ms 3.82ms 42.02ms 79.28% 12.14ms 12.66ms 19.24ms 28.70ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 49889 5.14MB 6.27k 533.68 7.08k 70.00% 19.30ms 4.86ms 38.67ms 91.19% 22.41ms 23.00ms 23.70ms 33.62ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 45991 6.05MB 5.78k 574.51 6.32k 90.00% 21.52ms 5.22ms 48.83ms 95.72% 24.77ms 25.23ms 25.61ms 36.72ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 80060 4.73MB 10.06k 450.00 10.74k 63.75% 11.49ms 2.48ms 19.01ms 83.38% 10.49ms 10.61ms 16.89ms 17.64ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 69163 4.09MB 8.68k 1.21k 10.06k 73.75% 13.45ms 4.37ms 212.16ms 78.31% 11.48ms 17.70ms 18.17ms 21.10ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 64250 5.64MB 8.06k 784.72 8.97k 68.75% 14.39ms 3.96ms 219.08ms 69.81% 12.51ms 18.50ms 18.74ms 21.53ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 77489 4.58MB 9.74k 1.83k 19.10k 75.00% 11.34ms 3.79ms 211.21ms 77.76% 9.75ms 14.92ms 15.52ms 22.70ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 70123 4.15MB 8.82k 2.02k 12.55k 56.25% 10.56ms 3.55ms 212.93ms 96.15% 8.59ms 13.42ms 13.72ms 15.98ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 65843 5.78MB 8.27k 1.00k 10.06k 61.25% 13.19ms 2.92ms 22.44ms 61.79% 11.09ms 16.44ms 16.79ms 20.56ms
bin/server_elixir_phoenix http://127.0.0.1:3000/ 0 132468 18.07MB 16.56k 3.52k 25.88k 71.25% 7.21ms 15.87ms 217.47ms 97.18% 4.41ms 9.93ms 15.06ms 73.89ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user 0 117695 16.05MB 14.72k 3.66k 24.92k 70.00% 8.03ms 16.18ms 222.90ms 96.22% 4.59ms 11.70ms 17.55ms 65.18ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user/0 0 109060 17.99MB 13.67k 2.09k 18.69k 67.50% 8.41ms 15.83ms 226.37ms 96.87% 6.52ms 11.77ms 16.64ms 51.92ms
bin/server_elixir_plug http://127.0.0.1:3000/ 0 139498 19.02MB 17.46k 2.75k 24.65k 68.75% 6.09ms 13.00ms 205.68ms 98.30% 4.75ms 8.43ms 11.80ms 28.43ms
bin/server_elixir_plug http://127.0.0.1:3000/user 0 128609 17.54MB 16.09k 3.71k 23.93k 68.75% 7.62ms 15.80ms 215.78ms 97.33% 5.15ms 11.00ms 15.69ms 67.00ms
bin/server_elixir_plug http://127.0.0.1:3000/user/0 0 135539 22.36MB 16.95k 3.97k 27.29k 66.25% 6.39ms 13.15ms 213.61ms 98.15% 5.12ms 8.63ms 12.28ms 27.72ms
bin/server_go_echo http://127.0.0.1:3000/ 0 276253 30.56MB 34.55k 7.31k 52.76k 65.00% 2.66ms 5.29ms 202.97ms 98.83% 1.86ms 3.47ms 4.92ms 8.16ms
bin/server_go_echo http://127.0.0.1:3000/user 0 273532 30.26MB 34.24k 8.63k 53.52k 71.25% 3.57ms 11.94ms 206.24ms 98.60% 1.67ms 3.51ms 5.53ms 20.50ms
bin/server_go_echo http://127.0.0.1:3000/user/0 0 269404 37.51MB 33.70k 6.40k 55.39k 72.50% 3.12ms 8.32ms 207.78ms 99.04% 1.96ms 3.72ms 5.29ms 11.19ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/ 0 610519 54.15MB 76.48k 22.98k 120.83k 65.00% 1.27ms 2.88ms 199.23ms 97.36% 0.90ms 1.25ms 2.26ms 5.61ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user 0 620908 55.07MB 78.01k 32.65k 131.95k 60.00% 1.41ms 7.77ms 200.06ms 99.28% 775.00us 0.96ms 1.39ms 7.11ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user/0 0 535732 83.79MB 66.91k 17.61k 102.53k 67.50% 1.69ms 5.08ms 205.96ms 98.43% 1.05ms 1.60ms 3.09ms 7.83ms
bin/server_go_gin http://127.0.0.1:3000/ 0 232969 25.77MB 29.12k 6.68k 46.24k 65.00% 3.28ms 5.11ms 206.07ms 95.29% 2.25ms 4.26ms 6.43ms 15.13ms
bin/server_go_gin http://127.0.0.1:3000/user 0 233999 25.89MB 29.27k 8.78k 47.15k 73.75% 3.97ms 11.46ms 212.65ms 98.04% 2.10ms 4.15ms 6.67ms 23.13ms
bin/server_go_gin http://127.0.0.1:3000/user/0 0 227011 31.61MB 28.39k 5.16k 44.18k 65.00% 3.19ms 4.01ms 201.29ms 92.37% 2.22ms 4.24ms 6.46ms 15.18ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/ 0 269325 29.79MB 33.72k 4.56k 49.62k 68.75% 2.80ms 6.45ms 205.24ms 99.09% 2.01ms 3.43ms 4.83ms 8.99ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user 0 259825 28.74MB 32.55k 6.58k 62.53k 76.25% 3.19ms 7.08ms 202.57ms 96.86% 1.91ms 3.79ms 5.99ms 16.75ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user/0 0 237488 33.07MB 29.68k 4.92k 42.66k 65.00% 3.61ms 9.33ms 216.84ms 98.56% 2.23ms 4.12ms 6.14ms 15.91ms
bin/server_go_iris http://127.0.0.1:3000/ 0 328609 36.35MB 41.14k 9.14k 63.35k 66.25% 2.71ms 9.19ms 205.97ms 99.02% 1.47ms 2.59ms 4.51ms 11.70ms
bin/server_go_iris http://127.0.0.1:3000/user 0 313483 34.68MB 39.30k 8.15k 59.51k 71.25% 2.87ms 8.35ms 200.31ms 98.73% 1.65ms 3.18ms 4.98ms 12.45ms
bin/server_go_iris http://127.0.0.1:3000/user/0 0 313635 43.67MB 39.17k 6.04k 57.48k 68.75% 2.77ms 8.51ms 201.91ms 99.09% 1.65ms 2.83ms 4.68ms 10.62ms
bin/server_node_clusterexpress http://127.0.0.1:3000/ 0 103164 15.94MB 12.89k 4.68k 24.93k 66.25% 5.87ms 6.31ms 216.98ms 95.23% 4.32ms 7.38ms 7.93ms 22.77ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user 0 104645 16.17MB 13.10k 6.84k 30.59k 61.25% 5.78ms 8.31ms 224.75ms 96.59% 4.09ms 7.27ms 7.87ms 20.81ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user/0 0 97393 17.83MB 12.15k 3.75k 21.26k 68.75% 7.94ms 11.30ms 236.39ms 96.54% 6.49ms 7.81ms 11.71ms 40.82ms
bin/server_node_express http://127.0.0.1:3000/ 0 11702 1.81MB 1.47k 303.69 2.10k 68.75% 47.77ms 6.85ms 304.39ms 96.28% 47.03ms 50.00ms 51.41ms 55.01ms
bin/server_node_express http://127.0.0.1:3000/user 0 11385 1.76MB 1.43k 303.55 2.26k 71.25% 62.53ms 12.81ms 329.94ms 95.99% 64.71ms 65.03ms 65.59ms 67.29ms
bin/server_node_express http://127.0.0.1:3000/user/0 0 10600 1.94MB 1.33k 369.52 2.12k 68.75% 54.90ms 16.82ms 334.96ms 96.93% 54.95ms 55.23ms 63.02ms 70.22ms
bin/server_python_flask http://127.0.0.1:3000/ 0 2573 386.96KB 368.79 212.21 730.00 61.43% 42.92ms 10.71ms 249.61ms 96.93% 42.55ms 44.44ms 45.38ms 52.03ms
bin/server_python_flask http://127.0.0.1:3000/user 0 2572 386.80KB 444.98 365.57 1.09k 46.55% 46.36ms 17.70ms 844.46ms 98.21% 46.27ms 46.52ms 46.92ms 55.44ms
bin/server_python_flask http://127.0.0.1:3000/user/0 0 2325 417.77KB 519.40 357.38 1.05k 60.00% 45.96ms 7.87ms 249.99ms 96.13% 46.72ms 46.90ms 47.05ms 47.97ms
bin/server_python_sanic http://127.0.0.1:3000/ 0 219112 24.87MB 27.35k 8.36k 48.48k 66.25% 4.68ms 3.42ms 31.65ms 81.76% 3.76ms 6.41ms 7.84ms 16.94ms
bin/server_python_sanic http://127.0.0.1:3000/user 0 203034 23.04MB 25.30k 6.40k 50.82k 76.25% 4.85ms 3.21ms 28.10ms 76.85% 4.11ms 7.03ms 7.83ms 16.00ms
bin/server_python_sanic http://127.0.0.1:3000/user/0 0 209172 29.72MB 26.05k 7.22k 46.38k 75.00% 4.76ms 3.39ms 31.57ms 75.80% 4.00ms 7.02ms 7.82ms 16.56ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 377451 27.00MB 63.28k 47.93k 140.57k 43.33% 269.36us 271.65us 13.58ms 95.91% 225.00us 337.00us 423.00us 818.00us
bin/server_rust_iron http://127.0.0.1:3000/user 0 357691 25.58MB 59.95k 37.68k 116.23k 48.33% 337.42us 254.98us 19.64ms 91.24% 333.00us 414.00us 494.00us 0.89ms
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 323302 40.39MB 46.41k 31.45k 103.48k 54.29% 392.30us 810.67us 58.81ms 99.39% 360.00us 487.00us 607.00us 1.03ms
bin/server_rust_nickel http://127.0.0.1:3000/ 0 307276 38.10MB 154.64k 8.27k 161.22k 85.00% 46.75us 24.95us 1.61ms 75.98% 36.00us 50.00us 88.00us 95.00us
bin/server_rust_nickel http://127.0.0.1:3000/user 0 382918 47.47MB 175.16k 20.53k 208.29k 72.73% 43.38us 29.95us 9.56ms 89.64% 31.00us 64.00us 74.00us 86.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 327277 51.50MB 164.46k 12.65k 185.00k 60.00% 49.29us 18.09us 4.00ms 82.48% 47.00us 56.00us 68.00us 84.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 341102 29.60MB 171.48k 19.97k 195.75k 60.00% 62.07us 40.21us 1.21ms 77.88% 53.00us 71.00us 130.00us 142.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 332676 28.87MB 111.62k 60.03k 171.57k 66.67% 73.98us 50.96us 10.61ms 93.73% 61.00us 100.00us 118.00us 147.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 320420 49.50MB 107.43k 55.10k 166.95k 63.33% 76.82us 49.28us 10.62ms 92.71% 63.00us 106.00us 122.00us 145.00us
OvermindDL1 commented 6 years ago

That looks so much better on github than in the terminal... ^.^;

Good to see no error happened on any of them!

Some are clearly faster than others, but most are quite close together. It is sorted by name at this point so ignore the sorting (what should I sort by?).

It is also quite interesting at some of the speed differences between the 3 different routes for a single given server.

In general it looks like from a quick look on that, that python's flask is the overall slowest (by far!), with node's express not far behind. Go seemed to have the most impressive showing (I really really dislike the 'language' itself though, blegh...). Rust was not far behind Go. Elixir was a good middle ground. Crystal was pretty far behind though, I guess it's multi-threading is not up to par quite yet unlike many of the other frameworks (I am running the latest/nightly versions of crystal/rust/go/python3, though my elixir is one version out of date now since a new version just came out).

Now I think I may let it run with a higher connections count with 5s warmup and 30s runtime per test.

OvermindDL1 commented 6 years ago

First I decided to test 'just' rust with 10k concurrent connections, whoops, I need to increase one of my OS limits, glad I did this test first... >.>

On the plus side for as many threads as it was able to create, (EDIT: misread, amended this sentance ^.^) Rust did quite well, it did not really scale any better with the connection count though.

The results:

Total Cores: 16 Concurrent Connections: 10000

Processing servers:

Processing: bin/server_rust_iron

Processing: bin/server_rust_nickel

Processing: bin/server_rust_rocket

Path URL Errors Total Requests Count Total Requests Throughput Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_rust_iron http://127.0.0.1:3000/ 0 10947034 782.99MB 91.68k 49.63k 140.01k 75.00% 229.33us 174.20us 19.35ms 90.29% 225.00us 273.00us 368.00us 621.00us
bin/server_rust_iron http://127.0.0.1:3000/user 0 10518663 752.35MB 88.12k 47.81k 143.83k 72.25% 251.87us 211.54us 21.36ms 92.88% 234.00us 286.00us 419.00us 724.00us
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 9505634 1.16GB 106.14k 23.18k 132.44k 66.44% 282.64us 241.00us 25.26ms 95.02% 250.00us 320.00us 477.00us 846.00us
bin/server_rust_nickel http://127.0.0.1:3000/ 0 4765504 590.82MB 159.67k 7.48k 176.46k 67.00% 78.56us 30.30us 4.63ms 60.60% 61.00us 114.00us 122.00us 131.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 5064768 796.97MB 169.62k 11.48k 221.65k 89.00% 74.91us 29.87us 7.85ms 61.07% 57.00us 109.00us 116.00us 123.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 8530304 740.30MB 142.95k 17.75k 195.35k 70.50% 73.29us 51.06us 12.10ms 81.93% 66.00us 86.00us 161.00us 174.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 7442954 645.93MB 124.69k 42.14k 199.62k 67.00% 81.46us 53.90us 12.01ms 71.86% 76.00us 91.00us 171.00us 184.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 4762954 735.85MB 159.53k 2.34k 164.68k 66.67% 116.52us 45.51us 14.60ms 75.55% 98.00us 114.00us 192.00us 202.00us
OvermindDL1 commented 6 years ago

With my system limit enhanced, I decided to try elixir with 50K connections (I set the file descriptor limit to 65536) and warmup of 3s and runtime of 10s, and the results:

Total Cores: 16 Concurrent Connections: 50000

Processing servers:

Processing: bin/server_elixir_phoenix

Processing: bin/server_elixir_plug

Path URL Errors Total Requests Count Total Requests Throughput Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_elixir_phoenix http://127.0.0.1:3000/ 0 6081 849.20KB 7.43k 5.58k 20.56k 87.50% 21.66ms 11.24ms 59.65ms 66.06% 19.39ms 27.52ms 37.47ms 55.00ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user 0 3736 521.73KB 4.62k 3.85k 13.86k 87.50% 22.12ms 10.99ms 65.17ms 68.31% 19.83ms 27.85ms 37.33ms 54.95ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user/0 0 8485 1.40MB 10.38k 8.12k 25.88k 75.00% 18.82ms 11.21ms 63.60ms 72.47% 16.80ms 22.51ms 32.13ms 60.33ms
bin/server_elixir_plug http://127.0.0.1:3000/ 0 6990 0.95MB 8.69k 8.42k 27.85k 87.50% 19.81ms 12.04ms 60.48ms 65.64% 16.72ms 27.13ms 38.28ms 53.77ms
bin/server_elixir_plug http://127.0.0.1:3000/user 0 5982 835.38KB 7.28k 8.06k 25.71k 87.50% 20.12ms 11.42ms 62.21ms 66.67% 18.91ms 26.26ms 35.47ms 53.07ms
bin/server_elixir_plug http://127.0.0.1:3000/user/0 0 5525 0.91MB 6.72k 2.67k 11.52k 75.00% 16.26ms 8.07ms 59.00ms 74.14% 14.98ms 20.40ms 25.67ms 48.97ms
OvermindDL1 commented 6 years ago

50k is definitely a bit more than my system can handle it seems, I think 1k is a good default value then, after all even rust didn't scale to higher concurrent connections later but it did seem to sustain it well. Now it is time for the 5s warmup, 30s runtime tests with 1k connections. I went ahead and pasted in the shell command I used to launch it as well so all settings can be seen, it defaults to 1000 concurrent connections and it is limited to half the total core count of sending the surge of requests, 'most' servers absolutely cap out every CPU at 100%, though some are obviously single threaded, like python and node. Memory usage did not seem to flucuate much among any of the servers though, baseline of system was about 390megs in use, rust seemed to spike to between 420-600megs (the higher memory usage one was the faster one as expected, I should have it report cpu/memory usage of the system at baseline and during tests... maybe later), crystal seemed to average ~500megs, though it seemed to only be using 1 CPU total (~102% CPU usage instead of the expected ~1200%), shouldn't crystal be heavily multi-threaded, this would definitely explain its poor ranking, though perhaps it's trying to minimize context switching cost by passing information between threads (going multi-threaded will definitely add in a hit on speed, just a question of if the multi-threading itself will make up for it or not, for note, the siegeing engine is using ~10% of each core), and wow when the go servers start running all cores are pegged to 100% again, with surprisingly little memory usage, only around ~438M system usage (why does the language syntax suck so much, blegh...), all the 4(5?) other go servers used almost identical memory too, fasthttprouter was just a 'tiny' bit less memory than the others (~432M) and iris using just a tiny bit more (~450), and pythons flask ate about ~418m and only 1 core, however python's sanic hit near 100% CPU usage(!) and ate ~520M,, it is multi-process as I saw many processes startup, then elixir phoenix started, ate about 80% of each CPU (it's VM tries to be CPU friendly as much as possible) and ate 550M, elixir plug is identical, which makes sense since phoenix just a full web framework on top of plug, and nodes clusterexpress is obviously mulit-core, it hits 100% of all CPU's, however it eats an amazing 1.24G of RAM (!?), express by itself barely hits 100% of one CPU, but only eats ~477M (which is still high compared to most servers here), and the output:

╰─➤ ../stats.exs -c 1000 -w 5 -d 30 rust crystal go flask sanic elixir node Total Cores: 16 Concurrent Connections: 1000

Processing servers:

Processing: bin/server_rust_iron

Processing: bin/server_rust_nickel

Processing: bin/server_rust_rocket

Processing: bin/server_crystal_kemal

Processing: bin/server_crystal_raze

Processing: bin/server_crystal_router_cr

Processing: bin/server_go_echo

Processing: bin/server_go_fasthttprouter

Processing: bin/server_go_gin

Processing: bin/server_go_gorilla_mux

Processing: bin/server_go_iris

Processing: bin/server_python_flask

Processing: bin/server_python_sanic

Processing: bin/server_elixir_phoenix

Processing: bin/server_elixir_plug

Processing: bin/server_node_clusterexpress

Processing: bin/server_node_express

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 2018784 207.93MB 67159.57 6.92MB 8.45k 562.28 9.99k 69.96% 14.86ms 3.51ms 31.48ms 77.44% 13.03ms 13.88ms 20.72ms 25.66ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 1603828 165.19MB 53390.93 5.50MB 6.71k 431.86 7.59k 66.08% 18.68ms 4.71ms 231.04ms 63.76% 15.25ms 23.75ms 24.21ms 29.72ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 1413974 186.09MB 47033.96 6.19MB 5.92k 331.30 7.20k 60.75% 21.21ms 4.60ms 39.13ms 68.33% 17.64ms 25.62ms 26.06ms 31.61ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 2079720 122.97MB 69166.99 4.09MB 8.70k 358.70 10.01k 80.12% 14.37ms 3.28ms 228.49ms 58.93% 16.70ms 17.20ms 17.47ms 18.02ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 1774370 104.91MB 59004.83 3.49MB 7.42k 484.76 8.84k 73.17% 16.87ms 3.12ms 217.93ms 73.40% 18.02ms 18.36ms 18.73ms 24.09ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 1648147 144.61MB 54836.04 4.81MB 6.90k 450.90 8.43k 68.79% 18.13ms 3.83ms 233.54ms 79.04% 19.22ms 19.45ms 19.68ms 22.40ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 2402211 142.04MB 79923.18 4.73MB 10.05k 439.44 11.36k 73.04% 12.47ms 2.97ms 219.21ms 66.85% 10.53ms 16.41ms 16.72ms 17.09ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 2019711 119.42MB 67223.57 3.97MB 8.45k 499.56 10.01k 76.88% 14.81ms 3.52ms 221.83ms 72.25% 12.76ms 18.10ms 18.45ms 21.74ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 2111187 185.23MB 70214.92 6.16MB 8.84k 578.54 10.12k 69.83% 14.21ms 3.41ms 31.58ms 70.74% 11.94ms 17.75ms 18.28ms 23.70ms
bin/server_elixir_phoenix http://127.0.0.1:3000/ 0 3903425 532.33MB 129848.18 17.71MB 16.35k 2.67k 25.76k 67.52% 8.54ms 8.56ms 236.30ms 87.20% 8.65ms 13.41ms 18.41ms 28.89ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user 0 3441921 469.39MB 114473.32 15.61MB 14.41k 2.70k 25.33k 68.44% 9.78ms 9.67ms 271.64ms 56.82% 9.96ms 15.61ms 21.38ms 33.62ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user/0 0 3399469 560.86MB 113011.72 18.65MB 14.23k 2.05k 33.66k 70.53% 9.48ms 8.78ms 221.57ms 57.13% 9.87ms 14.66ms 19.66ms 30.02ms
bin/server_elixir_plug http://127.0.0.1:3000/ 0 4204063 573.33MB 139973.24 19.09MB 17.62k 2.28k 26.51k 68.81% 7.69ms 7.53ms 230.39ms 59.24% 7.92ms 11.75ms 15.85ms 24.80ms
bin/server_elixir_plug http://127.0.0.1:3000/user 0 3844247 524.26MB 127905.48 17.44MB 16.09k 3.13k 33.43k 70.28% 8.96ms 11.49ms 435.65ms 91.96% 8.79ms 13.97ms 19.41ms 30.83ms
bin/server_elixir_plug http://127.0.0.1:3000/user/0 0 3953662 652.30MB 131530.33 21.70MB 16.56k 2.09k 30.18k 68.27% 8.11ms 7.61ms 222.75ms 59.44% 8.37ms 12.29ms 16.51ms 25.51ms
bin/server_go_echo http://127.0.0.1:3000/ 0 8143056 0.88GB 270536.69 29.93MB 34.09k 4.97k 86.67k 72.81% 3.60ms 4.58ms 220.04ms 96.15% 2.85ms 4.68ms 6.54ms 11.15ms
bin/server_go_echo http://127.0.0.1:3000/user 0 8083816 0.87GB 268705.33 29.73MB 33.80k 4.72k 54.25k 69.76% 3.96ms 4.73ms 211.71ms 93.15% 2.86ms 4.89ms 7.45ms 19.77ms
bin/server_go_echo http://127.0.0.1:3000/user/0 0 7878681 1.07GB 261750.2 36.45MB 32.96k 4.68k 63.40k 72.16% 3.83ms 7.59ms 418.43ms 98.87% 2.95ms 4.82ms 6.75ms 11.81ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/ 0 16616387 1.44GB 552545.67 49.01MB 69.55k 17.93k 133.31k 63.88% 1.80ms 3.09ms 203.59ms 96.16% 1.27ms 2.03ms 3.41ms 7.14ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user 0 15773986 1.37GB 524262.17 46.50MB 66.01k 18.00k 142.84k 66.85% 1.88ms 2.81ms 203.84ms 95.02% 1.34ms 2.18ms 3.58ms 7.30ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user/0 0 14871569 2.27GB 494503.02 77.34MB 62.26k 15.53k 106.90k 65.20% 1.96ms 1.98ms 203.03ms 90.81% 1.40ms 2.39ms 3.80ms 7.44ms
bin/server_go_gin http://127.0.0.1:3000/ 0 6905333 763.91MB 229436.3 25.38MB 28.90k 4.02k 82.67k 73.60% 4.51ms 4.83ms 209.18ms 93.31% 3.57ms 5.71ms 8.10ms 20.11ms
bin/server_go_gin http://127.0.0.1:3000/user 0 6899553 763.27MB 229241.65 25.36MB 28.87k 4.46k 62.87k 70.94% 5.10ms 5.89ms 227.78ms 90.95% 3.52ms 6.04ms 10.33ms 28.18ms
bin/server_go_gin http://127.0.0.1:3000/user/0 0 6740060 0.92GB 223956.08 31.18MB 28.20k 4.01k 79.30k 74.32% 4.61ms 4.29ms 206.48ms 88.73% 3.66ms 5.86ms 8.35ms 20.68ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/ 0 7894014 0.85GB 262794.54 29.07MB 33.07k 4.11k 52.68k 68.96% 3.71ms 2.80ms 205.95ms 82.18% 2.98ms 4.84ms 6.85ms 13.17ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user 0 7761618 858.64MB 257894.84 28.53MB 32.46k 4.76k 67.66k 71.92% 4.20ms 4.18ms 210.52ms 90.94% 3.04ms 5.17ms 7.99ms 22.16ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user/0 0 6974864 0.95GB 231744.78 32.27MB 29.21k 4.15k 106.12k 75.06% 4.35ms 4.63ms 221.90ms 93.58% 3.47ms 5.60ms 7.82ms 16.50ms
bin/server_go_iris http://127.0.0.1:3000/ 0 9526387 1.03GB 316501.62 35.01MB 39.87k 7.19k 90.95k 70.80% 3.03ms 2.32ms 200.76ms 81.96% 2.38ms 3.95ms 5.91ms 10.68ms
bin/server_go_iris http://127.0.0.1:3000/user 0 9348087 1.01GB 310593.53 34.36MB 39.11k 7.05k 81.36k 70.07% 3.31ms 3.74ms 216.04ms 92.12% 2.38ms 4.18ms 6.43ms 14.32ms
bin/server_go_iris http://127.0.0.1:3000/user/0 0 9063856 1.23GB 301615.13 42.00MB 37.96k 6.91k 70.77k 70.60% 3.21ms 2.91ms 202.41ms 88.19% 2.51ms 4.14ms 6.22ms 11.41ms
bin/server_node_clusterexpress http://127.0.0.1:3000/ 0 3227217 498.59MB 107217.04 16.56MB 13.51k 1.49k 33.96k 77.45% 9.12ms 4.83ms 224.02ms 77.01% 7.74ms 11.37ms 15.41ms 23.35ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user 0 3202508 494.77MB 106414.09 16.44MB 13.40k 1.38k 56.02k 84.91% 9.14ms 4.27ms 152.68ms 73.72% 7.74ms 11.51ms 15.44ms 20.43ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user/0 0 3063205 560.89MB 101878.67 18.65MB 12.82k 1.63k 18.45k 63.34% 9.72ms 5.06ms 219.98ms 78.66% 7.90ms 11.60ms 15.71ms 24.49ms
bin/server_node_express http://127.0.0.1:3000/ 0 348348 53.82MB 11588.36 1.79MB 1.46k 160.56 2.27k 68.38% 85.64ms 18.43ms 683.13ms 95.63% 86.37ms 86.65ms 87.29ms 89.20ms
bin/server_node_express http://127.0.0.1:3000/user 0 344033 53.15MB 11449.4 1.77MB 1.44k 141.12 2.18k 72.50% 86.68ms 36.28ms 1.08s 95.66% 87.24ms 87.42ms 87.58ms 89.13ms
bin/server_node_express http://127.0.0.1:3000/user/0 0 307982 56.39MB 10244.34 1.88MB 1.30k 353.95 5.29k 89.12% 93.11ms 45.15ms 1.09s 89.37% 97.27ms 98.06ms 106.02ms 130.82ms
bin/server_python_flask http://127.0.0.1:3000/ 179 14112 2.07MB 469.67 70.63KB 438.22 435.07 2.97k 77.17% 49.68ms 89.53ms 3.28s 96.03% 44.57ms 44.93ms 45.39ms 601.73ms
bin/server_python_flask http://127.0.0.1:3000/user 272 20373 2.99MB 678.66 102.06KB 338.75 352.68 1.19k 76.98% 72.15ms 151.94ms 3.94s 96.12% 46.27ms 46.57ms 47.06ms 612.41ms
bin/server_python_flask http://127.0.0.1:3000/user/0 0 4762 855.67KB 158.26 28.44KB 202.87 186.67 780.00 70.23% 71.33ms 120.57ms 878.83ms 91.35% 37.02ms 62.84ms 140.42ms 832.97ms
bin/server_python_sanic http://127.0.0.1:3000/ 0 6507225 738.49MB 216248.64 24.54MB 27.26k 6.10k 59.77k 69.27% 4.60ms 3.34ms 51.46ms 77.70% 3.86ms 6.63ms 7.71ms 16.55ms
bin/server_python_sanic http://127.0.0.1:3000/user 0 6027117 684.00MB 200373.66 22.74MB 25.26k 5.08k 55.16k 69.92% 4.93ms 3.38ms 59.31ms 77.22% 4.20ms 7.05ms 7.83ms 16.84ms
bin/server_python_sanic http://127.0.0.1:3000/user/0 0 6307807 0.88GB 209760.13 29.81MB 26.43k 6.08k 57.14k 68.32% 4.71ms 3.30ms 48.53ms 77.23% 3.97ms 6.90ms 7.73ms 16.39ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 11444364 818.56MB 380822.91 27.24MB 54.76k 38.07k 135.15k 57.05% 309.11us 303.98us 46.98ms 96.89% 301.00us 389.00us 477.00us 842.00us
bin/server_rust_iron http://127.0.0.1:3000/user 0 10817548 773.73MB 360281.54 25.77MB 60.41k 35.89k 136.57k 66.72% 313.84us 261.07us 30.24ms 95.64% 311.00us 392.00us 477.00us 751.00us
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 9772517 1.19GB 324950.53 40.60MB 40.92k 34.26k 132.12k 67.62% 346.60us 289.12us 31.46ms 91.79% 330.00us 453.00us 576.00us 0.99ms
bin/server_rust_nickel http://127.0.0.1:3000/ 0 4870844 603.88MB 161986.71 20.08MB 163.19k 12.98k 205.17k 76.67% 76.42us 32.13us 12.96ms 66.96% 60.00us 112.00us 121.00us 130.00us
bin/server_rust_nickel http://127.0.0.1:3000/user 0 9037151 1.09GB 300775.0 37.29MB 151.41k 13.86k 210.60k 69.83% 51.94us 23.02us 10.21ms 83.10% 46.00us 68.00us 77.00us 87.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 10066517 1.55GB 334773.22 52.68MB 112.43k 58.13k 189.35k 54.00% 50.53us 22.25us 10.98ms 88.43% 51.00us 58.00us 67.00us 85.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 10908846 0.92GB 362640.69 31.47MB 121.84k 50.66k 204.76k 54.89% 68.20us 42.09us 11.98ms 94.41% 64.00us 88.00us 102.00us 129.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 10859171 0.92GB 361154.03 31.34MB 121.28k 32.99k 187.25k 58.33% 72.60us 44.34us 11.86ms 95.20% 71.00us 90.00us 105.00us 141.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 9873379 1.49GB 328320.21 50.72MB 110.28k 61.67k 194.74k 57.22% 75.67us 46.89us 12.18ms 93.70% 68.00us 101.00us 115.00us 146.00us
OvermindDL1 commented 6 years ago

It seems to be about the same relative values as compared to the 1s test (^.^:), go just stomps everything else with rust close behind, etc... etc...

Interestingly flask got overloaded well enough that it started having a tiny bit of errors overall, still poor compared to everything else that is error-less. ^.^

Most things seem to have a pretty good worst-case latency as well (Rust had the best worst-case by far of anything else). To continue tests I think I'd need to start overwhelming them and seeing when they start to fail.

Should I toss my script into the repo? Not pretty at all but it works.

OvermindDL1 commented 6 years ago

Also apparently I had req/s and throughput backwards, ignore that, it's fixed in the code now. :-)

kalicki commented 6 years ago

I think we should monitor memory usage, that should have a high value in the analysis. I missed analyzing Lucky (Crystal), I didn't find it in your analysis.

kalicki commented 6 years ago

I think we should improve the presentation of the results and even create a kind of graphics in this style, we can even put the results in different environments like win, Linux, Mac and their configs

eg. https://screenshots.firefox.com/6yABrQ90SYXmC0j8/markojs.com => https://markojs.com/

OvermindDL1 commented 6 years ago

Yeah this is a very raw dump of data, it could easily be output in any way.

And Lucky must not have been in the latest git master as that is what I used. ^.^

OvermindDL1 commented 6 years ago

I whipped up a C++ server using libevent (libevent is the library that a lot, like a LOT of servers use, such as most servers in node, go, etc...) using the http(s) server API (this is a full server routing framework and all), I figure it should be a good baseline as most things build on top of libevent (should I PR it in?):

Results:

╰─➤ ../stats.exs -w 1 -d 2 evhtp rust crystal go Total Cores: 16 Concurrent Connections: 1000

Processing servers:

Processing: bin/server_cpp_evhtp

Processing: bin/server_rust_iron

Processing: bin/server_rust_nickel

Processing: bin/server_rust_rocket

Processing: bin/server_crystal_kemal

Processing: bin/server_crystal_raze

Processing: bin/server_crystal_router_cr

Processing: bin/server_go_echo

Processing: bin/server_go_fasthttprouter

Processing: bin/server_go_gin

Processing: bin/server_go_gorilla_mux

Processing: bin/server_go_iris

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_cpp_evhtp http://127.0.0.1:3000/ 0 1427890 687945.81 87.15MB 41.99MB 89.24k 25.87k 130.30k 55.62% 1.86ms 2.76ms 27.33ms 87.73% 613.00us 2.01ms 5.38ms 12.91ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user 0 1353714 662471.43 82.62MB 40.43MB 84.61k 26.36k 127.38k 56.25% 1.83ms 2.47ms 26.10ms 87.14% 645.00us 2.29ms 5.02ms 11.64ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user/0 0 1344998 646974.87 120.57MB 58.00MB 84.21k 25.52k 124.68k 53.12% 1.88ms 2.59ms 28.04ms 87.52% 663.00us 2.26ms 5.13ms 12.45ms
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 127254 62676.29 13.11MB 6.46MB 8.00k 0.90k 9.97k 80.00% 14.82ms 3.28ms 33.93ms 77.38% 13.66ms 13.98ms 20.92ms 23.29ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 86446 42190.2 8.90MB 4.35MB 5.43k 486.91 6.29k 70.62% 22.84ms 4.45ms 51.90ms 73.43% 24.09ms 24.38ms 25.18ms 36.39ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 78361 38510.06 10.31MB 5.07MB 4.92k 267.68 5.78k 70.62% 25.38ms 2.65ms 32.70ms 90.12% 25.96ms 26.12ms 26.29ms 31.22ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 136821 66842.83 8.09MB 3.95MB 8.59k 593.47 10.10k 80.62% 14.48ms 3.55ms 31.16ms 77.41% 12.15ms 17.69ms 18.36ms 23.95ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 135620 66835.34 8.02MB 3.95MB 8.51k 340.56 8.95k 85.62% 14.69ms 3.28ms 26.70ms 71.21% 12.75ms 19.15ms 19.60ms 21.68ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 124093 60863.38 10.89MB 5.34MB 7.79k 656.10 8.62k 90.62% 16.05ms 3.64ms 40.21ms 72.04% 14.04ms 20.37ms 20.81ms 29.07ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 150720 73293.74 8.91MB 4.33MB 9.46k 1.20k 12.64k 78.12% 12.45ms 7.31ms 218.55ms 96.62% 11.02ms 14.40ms 17.12ms 23.94ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 130501 64578.02 7.72MB 3.82MB 8.19k 424.34 9.27k 58.12% 15.27ms 3.60ms 26.85ms 78.21% 12.91ms 18.74ms 19.36ms 24.39ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 137251 67077.85 12.04MB 5.89MB 8.62k 759.16 10.10k 73.12% 14.20ms 3.25ms 215.99ms 76.03% 12.74ms 15.05ms 19.09ms 22.13ms
bin/server_go_echo http://127.0.0.1:3000/ 0 545981 264975.13 60.40MB 29.31MB 34.09k 4.69k 47.53k 66.25% 4.46ms 14.23ms 210.97ms 98.67% 2.41ms 4.27ms 6.25ms 61.39ms
bin/server_go_echo http://127.0.0.1:3000/user 0 535549 259563.09 59.25MB 28.71MB 33.45k 4.95k 48.13k 65.00% 3.70ms 7.29ms 208.84ms 96.72% 2.40ms 4.45ms 6.96ms 18.17ms
bin/server_go_echo http://127.0.0.1:3000/user/0 0 516149 250105.88 71.87MB 34.82MB 32.26k 4.32k 47.08k 68.12% 3.46ms 5.30ms 216.23ms 96.41% 2.57ms 4.61ms 6.61ms 11.96ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/ 0 1079061 526945.72 95.70MB 46.74MB 67.62k 15.57k 107.68k 68.12% 1.61ms 1.43ms 21.69ms 88.18% 1.12ms 1.86ms 3.24ms 7.38ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user 0 1026163 503337.64 91.01MB 44.64MB 64.18k 15.05k 109.47k 68.12% 1.80ms 2.80ms 205.80ms 93.66% 1.17ms 2.04ms 3.67ms 8.62ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user/0 0 981917 475993.96 153.57MB 74.45MB 61.26k 13.09k 101.01k 68.75% 1.85ms 1.98ms 60.01ms 89.38% 1.16ms 2.10ms 3.98ms 10.18ms
bin/server_go_gin http://127.0.0.1:3000/ 0 453463 221348.85 50.16MB 24.49MB 28.34k 4.19k 41.77k 68.75% 5.55ms 17.95ms 415.27ms 98.39% 3.05ms 5.06ms 7.57ms 79.31ms
bin/server_go_gin http://127.0.0.1:3000/user 0 449422 220660.12 49.72MB 24.41MB 28.10k 5.22k 44.00k 69.38% 5.21ms 11.55ms 232.69ms 95.91% 3.04ms 5.49ms 9.53ms 30.46ms
bin/server_go_gin http://127.0.0.1:3000/user/0 0 436164 211764.33 60.31MB 29.28MB 27.26k 3.88k 43.44k 70.00% 4.52ms 9.15ms 212.63ms 97.71% 3.14ms 5.30ms 7.67ms 22.05ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/ 0 521280 253238.23 57.67MB 28.01MB 32.59k 5.23k 49.03k 70.00% 3.89ms 9.99ms 230.37ms 98.68% 2.52ms 4.38ms 6.45ms 16.33ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user 0 503400 247116.6 55.69MB 27.34MB 31.43k 5.94k 47.71k 72.50% 4.87ms 13.98ms 217.81ms 98.00% 2.52ms 4.65ms 7.55ms 50.91ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user/0 0 459921 222029.71 64.04MB 30.91MB 28.71k 3.78k 40.53k 68.75% 3.77ms 6.19ms 240.05ms 97.34% 2.82ms 4.78ms 6.78ms 13.48ms
bin/server_go_iris http://127.0.0.1:3000/ 0 615823 299482.13 68.13MB 33.13MB 38.49k 6.00k 58.30k 70.00% 3.21ms 7.84ms 210.11ms 98.49% 2.06ms 3.69ms 5.88ms 12.78ms
bin/server_go_iris http://127.0.0.1:3000/user 0 596330 293099.65 65.97MB 32.42MB 37.26k 6.66k 60.31k 72.50% 3.67ms 9.00ms 208.04ms 97.88% 2.20ms 4.02ms 6.60ms 17.81ms
bin/server_go_iris http://127.0.0.1:3000/user/0 0 580876 282486.16 80.88MB 39.33MB 36.23k 5.38k 52.11k 70.00% 3.77ms 11.33ms 214.13ms 99.00% 2.18ms 3.93ms 6.00ms 15.13ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 801804 387449.37 57.35MB 27.71MB 57.59k 40.74k 114.62k 44.29% 273.99us 191.92us 8.11ms 89.95% 269.00us 337.00us 412.00us 730.00us
bin/server_rust_iron http://127.0.0.1:3000/user 0 776765 377428.76 55.56MB 27.00MB 65.10k 32.97k 117.74k 65.83% 301.04us 171.63us 7.30ms 83.08% 298.00us 366.00us 436.00us 731.00us
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 692034 338555.41 86.46MB 42.30MB 49.73k 34.20k 108.94k 46.43% 340.25us 187.55us 8.02ms 76.21% 332.00us 427.00us 525.00us 0.91ms
bin/server_rust_nickel http://127.0.0.1:3000/ 0 635294 312094.68 78.76MB 38.69MB 106.60k 26.16k 139.32k 51.67% 48.67us 80.92us 8.07ms 99.87% 47.00us 62.00us 72.00us 92.00us
bin/server_rust_nickel http://127.0.0.1:3000/user 0 608854 300908.77 75.48MB 37.31MB 153.02k 6.29k 173.70k 77.50% 46.96us 23.97us 4.43ms 81.39% 38.00us 50.00us 86.00us 97.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 758688 370477.55 119.38MB 58.30MB 95.51k 15.73k 123.40k 56.25% 46.65us 86.10us 8.04ms 99.71% 42.00us 53.00us 64.00us 89.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 780129 382597.16 67.70MB 33.20MB 98.11k 21.17k 133.01k 71.25% 65.72us 112.27us 8.07ms 99.70% 56.00us 82.00us 98.00us 127.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 598831 296461.41 51.97MB 25.73MB 150.65k 4.50k 159.10k 65.00% 72.21us 44.34us 12.10ms 85.30% 58.00us 81.00us 139.00us 155.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 623223 304948.38 96.28MB 47.11MB 104.48k 15.43k 126.24k 61.67% 74.94us 107.88us 11.67ms 99.67% 64.00us 96.00us 122.00us 155.00us

As expected, C++ was absolutely faster than everything else by a fairly healthy (though not a magnetudal) margin, with Go's fasthttprouter coming up second.

Should I PR it in to use as a good baseline @tbrand and others?

OvermindDL1 commented 6 years ago

I added a final listing of 'Rankings' based on the average requests per second, running the above again gives (skipping all the setup/running stuff as it's identical, and as usual a 2 second testing time does not give any real difference from 30 second testing time, so 2s is what I used so I'm not sitting here for a half hour while it runs):

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Std ev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_cpp_evhtp http://127.0.0.1:3000/ 0 1395094 671023.13 85.15MB 40.96MB 87.48k 24.27k 125.13k 57.50% 1.78ms 2.
55ms 29.57ms 88.57% 635.00us 2.03ms 4.77ms 12.59ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user 0 1331146 652502.4 81.25MB 39.83MB 83.43k 24.54k 126.51k 55.62% 1.92ms
3.00ms 205.95ms 89.27% 679.00us 2.30ms 5.14ms 12.55ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user/0 0 1323210 637653.77 118.62MB 57.16MB 82.88k 25.60k 124.44k 61.25% 1.
76ms 2.34ms 26.02ms 87.82% 658.00us 2.15ms 4.67ms 11.46ms
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 102046 49847.64 10.51MB 5.13MB 6.41k 750.52 7.23k 93.75% 19.65ms 5.0
6ms 67.25ms 75.54% 20.16ms 20.59ms 21.77ms 45.71ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 82170 40430.31 8.46MB 4.16MB 5.16k 678.14 6.07k 80.62% 23.67ms 4
.16ms 63.25ms 85.56% 23.46ms 23.82ms 25.69ms 40.77ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 72036 35269.87 9.48MB 4.64MB 4.52k 528.98 5.05k 91.88% 27.55ms
4.45ms 67.80ms 83.11% 25.85ms 26.26ms 33.70ms 48.19ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 137731 67679.45 8.14MB 4.00MB 8.65k 521.85 9.53k 66.88% 14.00ms 3.17m
s 23.63ms 56.88% 12.25ms 17.04ms 17.63ms 20.74ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 111396 54934.95 6.59MB 3.25MB 7.00k 745.21 7.78k 91.88% 17.32ms 3
.50ms 221.38ms 67.11% 18.28ms 18.86ms 20.06ms 25.23ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 102461 49862.13 8.99MB 4.37MB 6.44k 383.59 7.07k 80.00% 19.44ms
3.25ms 41.51ms 74.79% 20.28ms 20.51ms 21.04ms 27.53ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 144944 70487.87 8.57MB 4.17MB 9.11k 496.64 10.03k 66.25% 13.73ms
3.48ms 32.13ms 77.10% 11.87ms 17.14ms 17.75ms 25.18ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 122785 60668.24 7.26MB 3.59MB 7.71k 1.21k 10.00k 71.25% 15.1
7ms 4.82ms 225.68ms 88.06% 14.11ms 18.66ms 20.38ms 26.56ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 141745 69016.54 12.44MB 6.06MB 8.90k 1.01k 11.28k 71.25% 1
3.26ms 3.32ms 27.99ms 77.15% 12.02ms 14.07ms 18.83ms 23.58ms
bin/server_go_echo http://127.0.0.1:3000/ 0 548500 265442.49 60.68MB 29.36MB 34.22k 6.12k 51.41k 70.00% 3.61ms 10.05ms
209.73ms 99.21% 2.30ms 4.11ms 6.10ms 12.35ms
bin/server_go_echo http://127.0.0.1:3000/user 0 535638 261031.4 59.26MB 28.88MB 33.51k 4.25k 46.94k 68.75% 4.29ms 12.7
3ms 218.46ms 98.47% 2.27ms 4.36ms 6.60ms 27.21ms
bin/server_go_echo http://127.0.0.1:3000/user/0 0 525061 256538.91 73.11MB 35.72MB 32.76k 5.58k 49.35k 72.50% 4.48ms 1
4.43ms 216.95ms 98.71% 2.34ms 4.37ms 6.42ms 61.52ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/ 0 1097978 531179.1 97.38MB 47.11MB 68.61k 14.23k 120.32k 73.12% 2.
05ms 7.95ms 207.97ms 99.10% 1.09ms 1.75ms 3.43ms 9.38ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user 0 1031467 506227.56 91.48MB 44.90MB 64.50k 14.27k 106.32k 69.3
8% 1.78ms 3.82ms 202.72ms 96.90% 1.17ms 2.00ms 3.49ms 7.71ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user/0 0 1005476 487158.19 157.26MB 76.19MB 62.86k 18.76k 108.31k 6
8.75% 2.10ms 7.66ms 205.56ms 99.00% 1.10ms 1.93ms 3.61ms 9.74ms
bin/server_go_gin http://127.0.0.1:3000/ 0 452591 218616.49 50.07MB 24.18MB 28.25k 3.73k 46.36k 75.62% 4.13ms 7.56ms 2
22.73ms 97.51% 3.12ms 5.14ms 7.43ms 16.04ms
bin/server_go_gin http://127.0.0.1:3000/user 0 451650 216942.3 49.96MB 24.00MB 28.19k 4.03k 41.78k 71.25% 4.35ms 6.57m
s 207.49ms 93.62% 3.03ms 5.25ms 8.51ms 21.22ms
bin/server_go_gin http://127.0.0.1:3000/user/0 0 442026 213831.06 61.55MB 29.77MB 27.60k 4.31k 41.96k 67.50% 5.07ms 13
.23ms 228.19ms 98.17% 3.09ms 5.20ms 7.89ms 30.64ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/ 0 515065 250041.75 56.98MB 27.66MB 32.20k 3.90k 45.72k 63.75% 3.51ms
4.60ms 209.53ms 95.48% 2.73ms 4.53ms 6.47ms 12.57ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user 0 504362 244060.62 55.80MB 27.00MB 31.51k 4.75k 48.17k 64.38% 4.3
2ms 11.12ms 215.93ms 98.17% 2.62ms 4.64ms 7.12ms 21.48ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user/0 0 455477 222109.9 63.42MB 30.93MB 28.42k 3.55k 40.67k 70.62% 4.
35ms 10.15ms 231.42ms 98.61% 3.05ms 4.99ms 7.09ms 18.13ms
bin/server_go_iris http://127.0.0.1:3000/ 0 619925 301331.9 68.58MB 33.34MB 38.68k 7.55k 67.02k 69.38% 4.35ms 15.35ms
215.75ms 98.49% 1.99ms 3.71ms 5.95ms 83.36ms
bin/server_go_iris http://127.0.0.1:3000/user 0 595026 287076.76 65.83MB 31.76MB 37.01k 6.13k 63.92k 75.62% 3.34ms 3.3
5ms 212.57ms 89.15% 2.30ms 4.28ms 6.95ms 16.01ms
bin/server_go_iris http://127.0.0.1:3000/user/0 0 578516 277833.09 80.55MB 38.68MB 36.10k 5.79k 54.64k 70.62% 3.50ms 8
.64ms 208.74ms 98.53% 2.25ms 3.88ms 6.16ms 14.54ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 786902 380163.34 56.28MB 27.19MB 56.50k 37.41k 117.18k 45.00% 271.93us 2
13.51us 10.29ms 91.86% 254.00us 337.00us 432.00us 0.89ms
bin/server_rust_iron http://127.0.0.1:3000/user 0 712109 348706.38 50.93MB 24.94MB 71.62k 37.40k 112.63k 73.00% 233.93
us 151.66us 8.51ms 84.90% 216.00us 296.00us 355.00us 625.00us
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 689735 335170.19 86.17MB 41.87MB 57.80k 31.32k 109.81k 65.83% 338.
68us 225.26us 11.92ms 85.96% 334.00us 418.00us 508.00us 0.86ms
bin/server_rust_nickel http://127.0.0.1:3000/ 0 639506 315462.71 79.28MB 39.11MB 107.28k 33.83k 143.00k 63.33% 47.51us
49.41us 7.99ms 95.30% 39.00us 48.00us 88.00us 106.00us
bin/server_rust_nickel http://127.0.0.1:3000/user 0 599424 296306.4 74.32MB 36.74MB 150.69k 3.42k 154.48k 85.00% 49.29
us 30.71us 7.65ms 86.98% 41.00us 50.00us 82.00us 92.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 728491 353094.08 113.94MB 55.22MB 122.23k 7.61k 141.77k 71.67% 4
8.08us 90.67us 9.61ms 99.91% 45.00us 51.00us 57.00us 73.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 666507 325571.64 57.84MB 28.25MB 111.72k 27.71k 150.06k 58.33% 66.12us
78.95us 8.04ms 97.82% 62.00us 75.00us 120.00us 153.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 605937 298236.53 52.59MB 25.88MB 152.44k 3.89k 161.07k 67.50% 72.8
0us 105.77us 8.08ms 99.86% 66.00us 76.00us 117.00us 136.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 652278 320427.22 100.77MB 49.50MB 109.44k 21.11k 153.35k 58.33%
74.28us 151.27us 11.95ms 99.76% 61.00us 93.00us 108.00us 141.00us

Rankings

Ranking by Average Requests per second:

  1. 653726 req/sec : bin/server_cpp_evhtp
  2. 508188 req/sec : bin/server_go_fasthttprouter
  3. 354679 req/sec : bin/server_rust_iron
  4. 321621 req/sec : bin/server_rust_nickel
  5. 314745 req/sec : bin/server_rust_rocket
  6. 288747 req/sec : bin/server_go_iris
  7. 261004 req/sec : bin/server_go_echo
  8. 238737 req/sec : bin/server_go_gorilla_mux
  9. 216463 req/sec : bin/server_go_gin
  10. 66724 req/sec : bin/server_crystal_router_cr
  11. 57492 req/sec : bin/server_crystal_raze
  12. 41849 req/sec : bin/server_crystal_kemal
OvermindDL1 commented 6 years ago

No I don't know why crystal is so very slow compared to the rest, this is a highly multi-core system so I can only guess that it's not taking advantage of threading or something... This would of course be more invisible the fewer cores you have (as was tested in another issue somewhere). Is there anyone that can take a look at the crystal servers and see how to get them working with many cores?

OvermindDL1 commented 6 years ago

And for the next update of the stats displayer it adds a space around the | for github tables to not break since github doesn't handle long tables properly otherwise... >.<

Example:

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_cpp_evhtp http://127.0.0.1:3000/ 0 1422249 691995.66 86.81MB 42.24MB 89.08k 24.64k 128.81k 62.50% 1.99ms 3.50ms 204.34ms 89.59% 660.00us 2.01ms 5.65ms 14.18ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user 0 1340528 662229.83 81.82MB 40.42MB 84.11k 26.92k 131.42k 59.38% 1.97ms 3.62ms 209.15ms 91.27% 685.00us 2.29ms 5.12ms 13.08ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user/0 0 1337724 651040.1 117.37MB 57.12MB 83.74k 23.53k 127.32k 59.38% 1.91ms 2.64ms 26.26ms 87.95% 693.00us 2.23ms 5.20ms 12.68ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 774340 375713.92 55.39MB 26.87MB 64.92k 41.16k 113.29k 55.00% 247.44us 213.02us 18.17ms 94.08% 194.00us 314.00us 395.00us 823.00us
bin/server_rust_iron http://127.0.0.1:3000/user 0 757888 369106.03 54.21MB 26.40MB 63.51k 25.55k 111.00k 58.33% 312.13us 173.36us 12.16ms 77.50% 298.00us 389.00us 488.00us 835.00us
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 668229 323079.4 83.48MB 40.36MB 48.01k 29.84k 98.97k 51.43% 349.31us 251.44us 24.21ms 86.74% 336.00us 436.00us 552.00us 0.98ms

Rankings

Ranking by Average Requests per second:

  1. 668421 req/sec : bin/server_cpp_evhtp
  2. 355966 req/sec : bin/server_rust_iron
OvermindDL1 commented 6 years ago

Ran a larger test, results (with the very long 'running' part snipped out, I need to put that behind a verbose flag... hmm, actually, doing that now, done):

╰─➤ ../stats.exs -w 1 -d 3 cpp crystal elixir go node rust python Total Cores: 16 Concurrent Connections: 1000

Processing servers:

Processing: bin/server_cpp_evhtp

Processing: bin/server_crystal_amber

unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

Processing: bin/server_crystal_kemal

Processing: bin/server_crystal_lucky

Processing: bin/server_crystal_raze

Processing: bin/server_crystal_router_cr

Processing: bin/server_elixir_phoenix

Processing: bin/server_elixir_plug

Processing: bin/server_go_echo

Processing: bin/server_go_fasthttprouter

Processing: bin/server_go_gin

Processing: bin/server_go_gorilla_mux

Processing: bin/server_go_iris

Processing: bin/server_python_django

unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

Processing: bin/server_node_clusterexpress

Processing: bin/server_node_clusterpolka

Processing: bin/server_node_express

Processing: bin/server_node_polka

Processing: bin/server_rust_iron

Processing: bin/server_rust_nickel

Processing: bin/server_rust_rocket

Processing: bin/server_python_django

unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

Processing: bin/server_python_flask

Processing: bin/server_python_flask.py

Processing: bin/server_python_japronto

Processing: bin/server_python_sanic

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_cpp_evhtp http://127.0.0.1:3000/ 0 2146801 700856.19 131.03MB 42.78MB 89.75k 26.75k 129.38k 60.00% 1.87ms 2.74ms 206.28ms 88.80% 703.00us 2.10ms 4.96ms 12.65ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user 0 2042801 670460.62 124.68MB 40.92MB 85.31k 22.34k 129.60k 59.58% 1.98ms 2.66ms 29.09ms 87.69% 729.00us 2.37ms 5.38ms 12.77ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user/0 0 2009790 653661.46 180.17MB 58.60MB 84.00k 23.92k 125.49k 61.25% 2.10ms 3.03ms 44.98ms 88.89% 768.00us 2.31ms 5.56ms 14.17ms
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 178786 58884.96 18.41MB 6.06MB 7.49k 0.90k 8.85k 79.58% 16.20ms 4.03ms 224.09ms 77.97% 13.98ms 20.00ms 20.82ms 24.18ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 128076 41974.45 13.19MB 4.32MB 5.36k 764.14 7.50k 68.75% 22.30ms 6.65ms 227.04ms 86.00% 23.32ms 23.95ms 25.03ms 31.60ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 106713 34946.48 14.04MB 4.60MB 4.47k 313.76 5.01k 59.17% 27.29ms 3.75ms 42.60ms 81.74% 26.10ms 29.17ms 32.64ms 38.77ms
bin/server_crystal_lucky http://127.0.0.1:3000/ 0 182524 60031.75 13.58MB 4.47MB 7.64k 1.12k 10.37k 78.75% 15.78ms 9.97ms 233.44ms 99.18% 13.59ms 19.67ms 20.93ms 25.07ms
bin/server_crystal_lucky http://127.0.0.1:3000/user 0 148667 49267.48 11.06MB 3.66MB 6.22k 529.73 7.33k 67.92% 19.47ms 4.36ms 224.83ms 67.33% 20.91ms 21.75ms 23.13ms 28.42ms
bin/server_crystal_lucky http://127.0.0.1:3000/user/0 0 145921 47959.94 16.42MB 5.40MB 6.11k 478.00 7.20k 67.92% 20.49ms 4.58ms 39.32ms 61.65% 22.00ms 22.74ms 25.08ms 30.11ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 225835 73851.33 13.35MB 4.37MB 9.46k 582.38 11.10k 66.25% 12.74ms 3.24ms 26.67ms 79.39% 11.45ms 12.83ms 18.12ms 23.09ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 166106 54811.58 9.82MB 3.24MB 6.95k 646.19 8.70k 73.75% 17.30ms 3.56ms 228.75ms 67.83% 18.35ms 18.91ms 20.77ms 25.28ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 158571 52145.41 13.91MB 4.58MB 6.64k 495.51 7.48k 65.00% 18.86ms 3.17ms 35.20ms 73.85% 19.25ms 19.94ms 21.34ms 27.04ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 211581 69053.47 12.51MB 4.08MB 8.86k 773.04 10.45k 71.25% 13.72ms 3.64ms 219.78ms 81.87% 11.74ms 16.88ms 17.50ms 23.08ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 180478 59762.71 10.67MB 3.53MB 7.55k 662.21 8.82k 80.42% 16.30ms 4.12ms 224.79ms 76.86% 17.93ms 18.91ms 19.67ms 26.45ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 186594 61161.62 16.37MB 5.37MB 7.81k 0.85k 8.85k 85.42% 15.95ms 4.80ms 230.37ms 93.69% 13.15ms 19.05ms 19.64ms 29.21ms
bin/server_elixir_phoenix http://127.0.0.1:3000/ 0 392222 127715.26 53.49MB 17.42MB 16.37k 2.45k 24.69k 67.08% 8.13ms 13.38ms 230.46ms 96.68% 7.42ms 11.87ms 16.39ms 29.52ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user 0 341798 112499.31 46.61MB 15.34MB 14.26k 2.58k 21.24k 71.25% 9.73ms 14.90ms 235.38ms 95.61% 8.85ms 13.98ms 19.59ms 38.70ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user/0 0 363445 118529.23 59.96MB 19.56MB 15.17k 2.99k 22.31k 64.17% 9.46ms 15.96ms 258.15ms 95.71% 7.94ms 13.72ms 19.86ms 40.53ms
bin/server_elixir_plug http://127.0.0.1:3000/ 0 414371 135296.69 56.51MB 18.45MB 17.30k 2.30k 24.17k 72.50% 8.44ms 15.79ms 226.76ms 97.98% 7.36ms 11.13ms 15.39ms 67.22ms
bin/server_elixir_plug http://127.0.0.1:3000/user 0 393818 129466.22 53.71MB 17.66MB 16.46k 3.74k 25.53k 72.92% 9.61ms 21.98ms 444.51ms 98.27% 7.74ms 12.38ms 17.61ms 97.53ms
bin/server_elixir_plug http://127.0.0.1:3000/user/0 0 378704 123785.16 62.12MB 20.30MB 15.82k 2.11k 23.29k 69.17% 8.61ms 14.33ms 243.67ms 97.11% 7.75ms 12.05ms 16.58ms 32.89ms
bin/server_go_echo http://127.0.0.1:3000/ 0 836884 272296.34 92.58MB 30.12MB 34.89k 7.07k 56.45k 68.33% 11.36ms 57.79ms 858.56ms 97.09% 2.28ms 4.21ms 6.76ms 320.37ms
bin/server_go_echo http://127.0.0.1:3000/user 0 818805 268245.8 90.58MB 29.68MB 34.07k 5.97k 66.68k 71.25% 3.69ms 4.43ms 204.76ms 91.09% 2.43ms 4.76ms 7.69ms 18.67ms
bin/server_go_echo http://127.0.0.1:3000/user/0 0 797196 260281.45 111.00MB 36.24MB 33.19k 4.61k 47.89k 69.17% 4.11ms 11.19ms 217.11ms 98.70% 2.53ms 4.44ms 6.57ms 18.62ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/ 0 1613754 525065.28 143.13MB 46.57MB 67.19k 14.79k 109.08k 65.83% 2.15ms 8.07ms 205.29ms 99.30% 1.16ms 1.95ms 3.52ms 8.89ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user 0 1513143 496574.35 134.20MB 44.04MB 63.12k 12.94k 103.04k 68.33% 1.93ms 4.37ms 210.16ms 97.69% 1.28ms 2.12ms 3.60ms 7.97ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user/0 0 1461347 475919.35 228.56MB 74.44MB 60.84k 14.61k 108.00k 69.17% 2.34ms 8.21ms 208.87ms 98.88% 1.23ms 2.26ms 3.96ms 10.97ms
bin/server_go_gin http://127.0.0.1:3000/ 0 672089 217657.24 74.35MB 24.08MB 27.96k 3.87k 44.99k 71.67% 4.48ms 7.22ms 210.45ms 96.57% 3.39ms 5.49ms 7.91ms 19.73ms
bin/server_go_gin http://127.0.0.1:3000/user 0 666437 218536.11 73.73MB 24.18MB 27.72k 3.85k 43.58k 65.83% 4.72ms 6.61ms 236.01ms 93.61% 3.37ms 5.69ms 9.01ms 24.72ms
bin/server_go_gin http://127.0.0.1:3000/user/0 0 654220 213276.88 91.09MB 29.70MB 27.24k 3.54k 37.51k 71.25% 4.81ms 9.70ms 215.64ms 97.84% 3.39ms 5.60ms 8.06ms 22.65ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/ 0 780475 253054.67 86.34MB 27.99MB 32.44k 4.66k 46.40k 67.50% 3.96ms 8.97ms 212.90ms 98.54% 2.73ms 4.63ms 6.65ms 16.11ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user 0 751262 246782.03 83.11MB 27.30MB 31.31k 4.74k 45.35k 68.33% 4.60ms 10.46ms 217.00ms 97.11% 2.85ms 4.99ms 7.92ms 25.03ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user/0 0 683985 221728.15 95.24MB 30.87MB 28.44k 5.10k 48.70k 69.17% 4.08ms 6.63ms 209.45ms 97.18% 3.16ms 5.16ms 7.30ms 15.06ms
bin/server_go_iris http://127.0.0.1:3000/ 0 933981 305170.79 103.32MB 33.76MB 38.90k 7.98k 66.70k 67.08% 3.89ms 12.53ms 226.85ms 98.74% 2.11ms 3.75ms 6.03ms 22.09ms
bin/server_go_iris http://127.0.0.1:3000/user 0 915065 298814.88 101.23MB 33.06MB 37.98k 7.01k 66.32k 72.50% 3.52ms 8.29ms 231.32ms 97.75% 2.20ms 4.05ms 6.51ms 16.83ms
bin/server_go_iris http://127.0.0.1:3000/user/0 0 883461 287234.89 123.01MB 39.99MB 36.75k 5.87k 55.54k 71.25% 3.14ms 4.91ms 212.15ms 96.22% 2.34ms 3.94ms 6.04ms 11.55ms
bin/server_node_clusterexpress http://127.0.0.1:3000/ 0 313950 101420.93 48.50MB 15.67MB 13.01k 1.99k 17.53k 67.08% 9.59ms 9.67ms 232.48ms 95.09% 7.63ms 10.16ms 15.31ms 46.90ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user 0 310855 100281.24 48.03MB 15.49MB 12.94k 1.75k 18.30k 70.29% 8.74ms 5.56ms 219.30ms 85.53% 7.61ms 10.62ms 15.20ms 23.68ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user/0 0 295890 95604.22 54.18MB 17.51MB 12.28k 1.96k 16.66k 70.83% 9.96ms 8.70ms 199.90ms 95.11% 7.74ms 11.68ms 15.61ms 37.80ms
bin/server_node_clusterpolka http://127.0.0.1:3000/ 0 641895 207034.72 60.60MB 19.55MB 26.66k 9.89k 56.31k 61.25% 4.64ms 4.38ms 209.56ms 91.69% 3.35ms 6.88ms 7.76ms 19.35ms
bin/server_node_clusterpolka http://127.0.0.1:3000/user 0 593817 191321.38 56.06MB 18.06MB 24.79k 7.44k 45.96k 60.67% 4.90ms 4.23ms 92.58ms 88.59% 3.67ms 6.70ms 7.98ms 19.93ms
bin/server_node_clusterpolka http://127.0.0.1:3000/user/0 0 566578 183987.11 69.70MB 22.63MB 23.65k 6.42k 50.82k 67.36% 5.36ms 5.05ms 207.58ms 91.96% 3.95ms 7.03ms 8.63ms 23.07ms
bin/server_node_express http://127.0.0.1:3000/ 0 35269 11658.99 5.45MB 1.80MB 1.48k 194.82 2.38k 74.58% 69.78ms 30.39ms 409.17ms 96.72% 79.42ms 79.96ms 80.27ms 191.27ms
bin/server_node_express http://127.0.0.1:3000/user 0 34377 11352.53 5.31MB 1.75MB 1.44k 201.95 1.98k 74.58% 77.12ms 57.64ms 605.65ms 95.96% 79.88ms 87.07ms 87.25ms 418.16ms
bin/server_node_express http://127.0.0.1:3000/user/0 0 32655 10752.71 5.98MB 1.97MB 1.37k 509.70 2.83k 65.83% 137.85ms 288.42ms 1.88s 91.58% 62.64ms 80.46ms 273.76ms 1.60s
bin/server_node_polka http://127.0.0.1:3000/ 0 80198 26344.48 7.57MB 2.49MB 3.36k 291.67 4.38k 83.33% 33.52ms 22.55ms 515.91ms 98.36% 35.97ms 36.29ms 39.38ms 104.25ms
bin/server_node_polka http://127.0.0.1:3000/user 0 71932 23796.6 6.79MB 2.25MB 3.01k 344.96 4.40k 76.25% 37.88ms 29.17ms 532.21ms 98.24% 39.52ms 41.15ms 43.74ms 172.88ms
bin/server_node_polka http://127.0.0.1:3000/user/0 0 68403 22459.84 8.42MB 2.76MB 2.86k 337.86 4.41k 74.58% 42.05ms 32.17ms 517.47ms 97.91% 41.57ms 43.47ms 45.66ms 216.97ms
bin/server_python_flask http://127.0.0.1:3000/ 0 5019 1640.23 779.32KB 254.68KB 296.98 232.53 730.00 51.52% 73.71ms 132.26ms 1.66s 94.70% 39.65ms 44.08ms 44.33ms 650.97ms
bin/server_python_flask http://127.0.0.1:3000/user 0 0 0.0 0.00B 0.00B 0.00 0.00 0.00 -nan% 0.00us 0.00us 0.00us -nan% 0.00us 0.00us 0.00us 0.00us
bin/server_python_flask http://127.0.0.1:3000/user/0 0 2052 676.43 378.74KB 124.85KB 305.83 289.52 780.00 66.15% 52.91ms 27.04ms 252.98ms 93.57% 45.99ms 46.64ms 48.66ms 170.51ms
bin/server_python_flask.py http://127.0.0.1:3000/ 0 4656 1523.24 722.95KB 236.52KB 323.16 197.56 720.00 60.74% 78.34ms 153.96ms 1.67s 94.08% 38.81ms 42.39ms 50.68ms 663.90ms
bin/server_python_flask.py http://127.0.0.1:3000/user 0 0 0.0 0.00B 0.00B 0.00 0.00 0.00 -nan% 0.00us 0.00us 0.00us -nan% 0.00us 0.00us 0.00us 0.00us
bin/server_python_flask.py http://127.0.0.1:3000/user/0 0 2449 791.16 452.01KB 146.02KB 307.96 214.29 810.00 60.26% 47.12ms 51.51ms 269.44ms 93.92% 33.61ms 37.98ms 45.66ms 264.68ms
bin/server_python_japronto http://127.0.0.1:3000/ 0 6844 2256.23 1.04MB 350.33KB 440.20 284.84 0.93k 42.76% 44.10ms 59.69ms 866.34ms 96.14% 34.79ms 35.90ms 36.23ms 498.85ms
bin/server_python_japronto http://127.0.0.1:3000/user 0 6752 2204.97 1.02MB 342.37KB 376.70 210.06 0.89k 66.29% 56.17ms 64.35ms 691.47ms 96.21% 44.32ms 44.50ms 44.69ms 448.25ms
bin/server_python_japronto http://127.0.0.1:3000/user/0 0 4811 1581.41 0.87MB 291.88KB 331.30 210.72 670.00 62.32% 75.91ms 134.53ms 1.72s 94.49% 43.17ms 46.13ms 46.38ms 647.41ms
bin/server_python_sanic http://127.0.0.1:3000/ 0 5114 1688.7 794.07KB 262.21KB 393.91 277.21 820.00 60.16% 70.48ms 130.56ms 1.67s 94.88% 40.22ms 44.17ms 44.71ms 651.23ms
bin/server_python_sanic http://127.0.0.1:3000/user 0 6547 2167.16 0.99MB 336.50KB 404.14 334.03 1.10k 52.20% 56.99ms 104.31ms 1.71s 96.41% 43.95ms 44.25ms 44.55ms 648.81ms
bin/server_python_sanic http://127.0.0.1:3000/user/0 0 6073 2006.45 1.09MB 370.33KB 387.28 265.09 840.00 58.44% 56.41ms 69.04ms 872.93ms 94.48% 42.87ms 44.06ms 44.34ms 448.96ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 1196975 388443.74 85.61MB 27.78MB 50.16k 32.46k 113.62k 56.67% 287.52us 220.44us 17.80ms 89.62% 273.00us 362.00us 458.00us 0.86ms
bin/server_rust_iron http://127.0.0.1:3000/user 0 1109655 363892.18 79.37MB 26.03MB 61.98k 36.05k 117.28k 42.78% 268.12us 292.06us 16.19ms 96.73% 233.00us 303.00us 434.00us 830.00us
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 1024580 334222.24 128.00MB 41.75MB 49.09k 32.47k 110.40k 48.57% 357.47us 1.26ms 190.51ms 99.78% 334.00us 433.00us 539.00us 1.04ms
bin/server_rust_nickel http://127.0.0.1:3000/ 0 893737 292395.8 110.80MB 36.25MB 149.81k 4.16k 160.00k 68.33% 48.47us 22.86us 7.83ms 78.07% 45.00us 56.00us 77.00us 86.00us
bin/server_rust_nickel http://127.0.0.1:3000/user 0 1102315 360165.16 136.66MB 44.65MB 123.23k 10.18k 146.77k 63.33% 48.26us 166.21us 12.05ms 99.75% 40.00us 48.00us 56.00us 75.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 878587 289351.73 138.25MB 45.53MB 147.27k 2.94k 153.02k 78.33% 50.90us 40.95us 8.89ms 98.21% 42.00us 54.00us 83.00us 94.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 1048101 342882.86 90.96MB 29.76MB 117.13k 9.56k 145.35k 65.56% 67.23us 105.82us 12.08ms 99.81% 59.00us 75.00us 108.00us 147.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 821482 264981.46 71.29MB 23.00MB 133.25k 8.53k 143.80k 80.65% 79.49us 98.68us 12.00ms 97.96% 65.00us 89.00us 153.00us 186.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 1048155 344959.29 161.93MB 53.29MB 87.87k 41.04k 136.39k 65.00% 70.51us 66.17us 8.11ms 98.69% 63.00us 89.00us 113.00us 140.00us

Rankings

Ranking by Average Requests per second:

  1. 674992 req/sec : bin/server_cpp_evhtp
  2. 499186 req/sec : bin/server_go_fasthttprouter
  3. 362186 req/sec : bin/server_rust_iron
  4. 317607 req/sec : bin/server_rust_rocket
  5. 313970 req/sec : bin/server_rust_nickel
  6. 297073 req/sec : bin/server_go_iris
  7. 266941 req/sec : bin/server_go_echo
  8. 240521 req/sec : bin/server_go_gorilla_mux
  9. 216490 req/sec : bin/server_go_gin
  10. 194114 req/sec : bin/server_node_clusterpolka
  11. 129516 req/sec : bin/server_elixir_plug
  12. 119581 req/sec : bin/server_elixir_phoenix
  13. 99102 req/sec : bin/server_node_clusterexpress
  14. 63325 req/sec : bin/server_crystal_router_cr
  15. 60269 req/sec : bin/server_crystal_raze
  16. 52419 req/sec : bin/server_crystal_lucky
  17. 45268 req/sec : bin/server_crystal_kemal
  18. 24200 req/sec : bin/server_node_polka
  19. 11254 req/sec : bin/server_node_express
  20. 2014 req/sec : bin/server_python_japronto
  21. 1954 req/sec : bin/server_python_sanic
  22. 772 req/sec : bin/server_python_flask
  23. 771 req/sec : bin/server_python_flask.py
  24. -1 req/sec : bin/server_crystal_amber
  25. -1 req/sec : bin/server_python_django
OvermindDL1 commented 6 years ago

Got ruby installed on the server, that was painful, new results of everything I can compile so far (maybe install nim or dotnetcore next):

─➤ ../stats.exs -w 1 -d 3 _
Total Cores: 16 Concurrent Connections: 1000

Processing servers:

Processing: bin/server_cpp_evhtp Processing: bin/server_crystal_amber unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

Processing: bin/server_crystal_kemal Processing: bin/server_crystal_lucky Processing: bin/server_crystal_raze Processing: bin/server_crystal_router_cr Processing: bin/server_elixir_phoenix Processing: bin/server_elixir_plug Processing: bin/server_go_echo Processing: bin/server_go_fasthttprouter Processing: bin/server_go_gin Processing: bin/server_go_gorilla_mux Processing: bin/server_go_iris Processing: bin/server_node_clusterexpress Processing: bin/server_node_clusterpolka Processing: bin/server_node_express Processing: bin/server_node_polka Processing: bin/server_python_django Processing: bin/server_python_flask Processing: bin/server_python_flask.py Processing: bin/server_python_japronto Processing: bin/server_python_sanic Processing: bin/server_ruby_rack-routing Processing: bin/server_ruby_rails Processing: bin/server_ruby_roda Processing: bin/server_ruby_sinatra Processing: bin/server_rust_iron Processing: bin/server_rust_nickel Processing: bin/server_rust_rocket

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_cpp_evhtp http://127.0.0.1:3000/ 0 2150438 701268.12 131.25MB 42.80MB 89.82k 25.81k 125.77k 62.92% 2.08ms 3.22ms 204.16ms 88.88% 735.00us 2.17ms 5.80ms 14.11ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user 0 2022355 665498.79 123.43MB 40.62MB 84.54k 22.56k 121.51k 58.75% 2.19ms 3.36ms 224.86ms 88.71% 781.00us 2.44ms 6.02ms 13.98ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user/0 0 2024720 657706.33 181.51MB 58.96MB 84.59k 24.29k 123.06k 60.00% 2.16ms 3.02ms 33.88ms 87.72% 774.00us 2.41ms 6.01ms 13.79ms
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 174424 57064.68 17.97MB 5.88MB 7.30k 391.74 8.02k 70.00% 17.13ms 4.13ms 30.78ms 71.59% 14.42ms 21.39ms 21.96ms 28.28ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 123936 40772.89 12.77MB 4.20MB 5.19k 405.87 6.31k 72.92% 24.15ms 4.12ms 33.28ms 73.85% 24.93ms 25.70ms 28.05ms 32.35ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 107274 35244.97 14.12MB 4.64MB 4.49k 529.62 5.90k 71.67% 26.72ms 3.73ms 229.23ms 84.88% 26.71ms 27.91ms 31.20ms 34.65ms
bin/server_crystal_lucky http://127.0.0.1:3000/ 0 159862 52604.44 11.89MB 3.91MB 6.69k 321.12 7.51k 68.33% 18.71ms 3.26ms 28.42ms 70.60% 20.04ms 20.47ms 20.85ms 25.36ms
bin/server_crystal_lucky http://127.0.0.1:3000/user 0 159321 52690.57 11.85MB 3.92MB 6.67k 638.47 7.59k 76.67% 18.52ms 4.47ms 33.06ms 63.41% 21.07ms 21.85ms 22.73ms 28.74ms
bin/server_crystal_lucky http://127.0.0.1:3000/user/0 0 166283 54647.57 18.71MB 6.15MB 6.96k 800.52 8.71k 84.17% 17.34ms 4.48ms 49.51ms 63.31% 14.32ms 21.81ms 22.31ms 23.92ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 245459 80589.26 14.51MB 4.77MB 10.28k 1.54k 15.05k 74.58% 12.79ms 20.89ms 437.44ms 98.73% 10.85ms 11.12ms 15.40ms 86.09ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 196574 64995.58 11.62MB 3.84MB 8.23k 627.94 10.10k 71.67% 15.02ms 3.75ms 29.94ms 70.86% 12.72ms 18.99ms 19.68ms 25.68ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 178817 58530.4 15.69MB 5.14MB 7.48k 491.94 8.60k 81.25% 16.61ms 3.79ms 217.21ms 74.27% 14.03ms 20.41ms 20.84ms 25.87ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 214170 69880.49 12.66MB 4.13MB 8.97k 638.21 10.12k 67.50% 13.77ms 3.42ms 26.19ms 75.17% 11.56ms 17.06ms 17.71ms 23.51ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 189137 62372.48 11.18MB 3.69MB 7.91k 521.88 8.84k 64.17% 15.68ms 3.84ms 27.21ms 77.72% 15.41ms 18.58ms 19.47ms 25.89ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 185561 60660.85 16.28MB 5.32MB 7.77k 654.61 9.53k 74.58% 16.13ms 4.06ms 30.51ms 83.53% 13.72ms 19.37ms 21.21ms 26.71ms
bin/server_elixir_phoenix http://127.0.0.1:3000/ 0 387251 125977.69 52.81MB 17.18MB 16.17k 2.78k 24.33k 70.00% 8.31ms 13.51ms 228.69ms 96.23% 7.43ms 11.95ms 16.78ms 31.79ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user 0 345152 113310.71 47.07MB 15.45MB 14.39k 2.79k 22.91k 70.83% 9.68ms 15.22ms 255.40ms 95.83% 8.79ms 13.97ms 19.62ms 39.35ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user/0 0 366605 119910.54 60.48MB 19.78MB 15.29k 3.16k 23.24k 65.83% 9.12ms 12.32ms 223.28ms 91.55% 8.38ms 14.08ms 20.28ms 37.55ms
bin/server_elixir_plug http://127.0.0.1:3000/ 0 415890 135559.88 56.72MB 18.49MB 17.38k 2.59k 26.91k 69.17% 8.01ms 14.09ms 231.23ms 97.82% 7.29ms 11.17ms 15.27ms 30.32ms
bin/server_elixir_plug http://127.0.0.1:3000/user 0 393048 129101.77 53.60MB 17.61MB 16.39k 3.04k 24.95k 66.25% 8.58ms 13.86ms 234.07ms 96.22% 7.87ms 12.40ms 17.39ms 33.29ms
bin/server_elixir_plug http://127.0.0.1:3000/user/0 0 386573 126067.29 63.78MB 20.80MB 16.15k 2.44k 24.81k 70.42% 8.58ms 14.72ms 230.12ms 97.64% 7.71ms 11.76ms 16.19ms 34.02ms
bin/server_go_echo http://127.0.0.1:3000/ 0 819753 266484.08 90.69MB 29.48MB 34.09k 5.13k 55.28k 72.50% 3.65ms 7.97ms 211.42ms 98.39% 2.48ms 4.45ms 6.48ms 13.50ms
bin/server_go_echo http://127.0.0.1:3000/user 0 806354 264289.2 89.20MB 29.24MB 33.53k 5.64k 51.81k 68.33% 3.83ms 6.56ms 209.56ms 95.20% 2.48ms 4.81ms 7.59ms 18.45ms
bin/server_go_echo http://127.0.0.1:3000/user/0 0 784785 256532.33 109.27MB 35.72MB 32.69k 5.96k 56.14k 70.42% 3.95ms 10.02ms 218.39ms 98.81% 2.59ms 4.50ms 6.54ms 15.42ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/ 0 1590748 521486.11 141.09MB 46.25MB 66.34k 14.89k 112.45k 68.75% 1.83ms 4.60ms 206.27ms 98.05% 1.18ms 2.01ms 3.45ms 7.76ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user 0 1535587 502235.48 136.19MB 44.54MB 64.01k 16.50k 112.84k 70.42% 1.79ms 2.65ms 207.80ms 93.55% 1.19ms 2.05ms 3.53ms 8.56ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user/0 0 1446834 468614.3 226.29MB 73.29MB 60.22k 13.24k 100.26k 68.75% 2.38ms 8.27ms 209.48ms 99.07% 1.26ms 2.29ms 4.12ms 10.21ms
bin/server_go_gin http://127.0.0.1:3000/ 0 673637 219038.81 74.52MB 24.23MB 28.02k 4.26k 42.19k 70.00% 4.64ms 9.17ms 211.32ms 97.56% 3.36ms 5.40ms 7.79ms 21.92ms
bin/server_go_gin http://127.0.0.1:3000/user 0 671020 220171.58 74.23MB 24.36MB 27.92k 4.11k 41.87k 70.42% 4.87ms 7.22ms 208.39ms 93.73% 3.33ms 5.72ms 9.33ms 26.79ms
bin/server_go_gin http://127.0.0.1:3000/user/0 0 658136 212774.09 91.64MB 29.63MB 27.39k 3.69k 44.81k 71.25% 5.33ms 12.78ms 223.69ms 97.44% 3.29ms 5.62ms 8.58ms 34.28ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/ 0 777970 251781.55 86.06MB 27.85MB 32.34k 4.30k 51.90k 72.50% 3.74ms 7.44ms 218.43ms 98.51% 2.75ms 4.61ms 6.53ms 12.85ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user 0 733382 240740.11 81.13MB 26.63MB 30.56k 4.39k 44.65k 66.67% 4.48ms 8.69ms 213.08ms 96.39% 2.91ms 5.18ms 8.15ms 23.08ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user/0 0 670485 216890.61 93.36MB 30.20MB 27.90k 3.60k 41.26k 70.83% 4.57ms 8.29ms 211.28ms 97.80% 3.39ms 5.47ms 7.80ms 18.62ms
bin/server_go_iris http://127.0.0.1:3000/ 0 923117 299800.33 102.12MB 33.17MB 38.39k 6.15k 66.44k 68.33% 3.23ms 7.16ms 213.09ms 98.30% 2.25ms 3.79ms 5.87ms 12.48ms
bin/server_go_iris http://127.0.0.1:3000/user 0 911694 295327.21 100.86MB 32.67MB 37.95k 7.42k 76.86k 73.75% 3.71ms 10.40ms 222.07ms 98.58% 2.19ms 3.99ms 6.38ms 16.62ms
bin/server_go_iris http://127.0.0.1:3000/user/0 0 883202 285004.82 122.97MB 39.68MB 36.68k 6.03k 59.39k 70.42% 3.47ms 8.27ms 211.34ms 98.70% 2.35ms 4.02ms 6.22ms 13.00ms
bin/server_node_clusterexpress http://127.0.0.1:3000/ 0 315231 102189.47 48.70MB 15.79MB 13.14k 2.40k 17.94k 53.33% 8.77ms 5.86ms 242.61ms 87.17% 7.66ms 9.86ms 15.24ms 27.82ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user 0 316233 102278.95 48.86MB 15.80MB 13.11k 2.21k 17.41k 58.33% 9.61ms 7.93ms 215.18ms 94.38% 7.78ms 11.25ms 15.55ms 36.86ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user/0 0 294103 95016.88 53.57MB 17.31MB 12.21k 1.29k 19.85k 73.33% 9.63ms 7.01ms 222.13ms 93.85% 7.77ms 11.02ms 15.44ms 39.77ms
bin/server_node_clusterpolka http://127.0.0.1:3000/ 0 641541 207799.62 60.57MB 19.62MB 26.69k 9.72k 56.71k 60.83% 4.50ms 3.85ms 77.51ms 88.27% 3.36ms 6.41ms 7.82ms 18.87ms
bin/server_node_clusterpolka http://127.0.0.1:3000/user 0 592641 192904.18 55.95MB 18.21MB 24.64k 7.51k 48.78k 61.25% 4.77ms 3.77ms 73.73ms 86.69% 3.61ms 6.74ms 7.83ms 18.79ms
bin/server_node_clusterpolka http://127.0.0.1:3000/user/0 0 568042 183849.2 69.88MB 22.62MB 23.59k 7.62k 52.13k 71.67% 5.17ms 4.83ms 211.61ms 92.01% 3.89ms 7.03ms 7.93ms 22.20ms
bin/server_node_express http://127.0.0.1:3000/ 0 34824 11368.02 5.38MB 1.76MB 1.46k 315.26 2.45k 67.92% 75.40ms 53.07ms 618.53ms 96.74% 77.42ms 80.94ms 84.32ms 351.65ms
bin/server_node_express http://127.0.0.1:3000/user 0 35709 11519.18 5.52MB 1.78MB 1.72k 1.36k 6.77k 81.25% 138.87ms 315.98ms 1.93s 91.15% 51.46ms 67.02ms 336.46ms 1.75s
bin/server_node_express http://127.0.0.1:3000/user/0 0 31448 10345.93 5.76MB 1.89MB 1.32k 194.24 1.88k 71.25% 101.83ms 139.58ms 1.12s 94.62% 70.01ms 98.53ms 125.59ms 915.86ms
bin/server_node_polka http://127.0.0.1:3000/ 0 79568 26111.15 7.51MB 2.47MB 3.33k 385.37 4.65k 73.33% 35.11ms 34.01ms 559.66ms 98.06% 36.11ms 36.73ms 39.13ms 194.45ms
bin/server_node_polka http://127.0.0.1:3000/user 0 71975 23774.86 6.80MB 2.24MB 3.01k 758.06 4.38k 54.58% 30.57ms 16.64ms 270.98ms 98.49% 31.78ms 32.02ms 35.05ms 62.21ms
bin/server_node_polka http://127.0.0.1:3000/user/0 0 67353 22130.48 8.29MB 2.72MB 2.82k 402.19 4.20k 76.67% 43.27ms 40.25ms 549.51ms 97.62% 42.21ms 43.05ms 45.83ms 266.18ms
bin/server_python_django http://127.0.0.1:3000/ 2010 2010 664.24 478.95KB 158.27KB 189.20 195.59 670.00 86.67% 139.27ms 94.63ms 1.81s 87.41% 150.44ms 151.90ms 153.00ms 595.36ms
bin/server_python_django http://127.0.0.1:3000/user 2221 2221 738.31 529.22KB 175.93KB 104.17 79.52 292.00 64.59% 152.15ms 83.42ms 1.82s 93.20% 160.20ms 161.63ms 162.55ms 554.08ms
bin/server_python_django http://127.0.0.1:3000/user/0 1845 1845 605.79 439.63KB 144.35KB 92.91 58.23 300.00 71.35% 186.12ms 157.64ms 1.82s 91.33% 155.69ms 157.44ms 314.84ms 654.22ms
bin/server_python_flask http://127.0.0.1:3000/ 2468 2468 816.73 588.08KB 194.61KB 109.42 110.84 460.00 83.04% 130.61ms 51.80ms 1.82s 94.25% 151.04ms 152.52ms 158.50ms 164.48ms
bin/server_python_flask http://127.0.0.1:3000/user 2232 2232 741.97 531.84KB 176.80KB 101.99 76.39 270.00 55.56% 132.39ms 43.37ms 534.04ms 93.64% 127.66ms 129.02ms 129.67ms 306.36ms
bin/server_python_flask http://127.0.0.1:3000/user/0 2222 2222 730.78 529.46KB 174.13KB 99.60 70.48 350.00 74.77% 145.79ms 66.56ms 565.34ms 93.65% 157.63ms 158.14ms 159.15ms 365.25ms
bin/server_python_flask.py http://127.0.0.1:3000/ 0 6002 1980.39 0.88MB 295.90KB 355.43 302.32 1.07k 68.94% 65.66ms 102.82ms 1.67s 95.45% 45.85ms 46.00ms 46.21ms 649.89ms
bin/server_python_flask.py http://127.0.0.1:3000/user 0 0 0.0 0.00B 0.00B 0.00 0.00 0.00 -nan% 0.00us 0.00us 0.00us -nan% 0.00us 0.00us 0.00us 0.00us
bin/server_python_flask.py http://127.0.0.1:3000/user/0 0 2954 956.44 527.91KB 170.93KB 234.04 152.72 514.00 56.52% 87.98ms 147.71ms 1.66s 90.01% 42.22ms 44.87ms 154.57ms 650.11ms
bin/server_python_japronto http://127.0.0.1:3000/ 0 338028 110124.74 25.47MB 8.30MB 15.16k 1.99k 31.18k 96.43% 8.27ms 0.99ms 14.23ms 94.58% 8.42ms 8.54ms 8.73ms 9.23ms
bin/server_python_japronto http://127.0.0.1:3000/user 0 345647 114016.07 26.04MB 8.59MB 14.47k 0.89k 18.09k 83.33% 8.69ms 9.31ms 225.75ms 99.48% 8.65ms 8.79ms 8.92ms 9.38ms
bin/server_python_japronto http://127.0.0.1:3000/user/0 0 305102 99527.03 31.72MB 10.35MB 12.78k 309.91 14.37k 86.25% 9.81ms 349.89us 24.12ms 95.69% 9.78ms 9.90ms 10.03ms 10.39ms
bin/server_python_sanic http://127.0.0.1:3000/ 0 567418 183219.45 64.39MB 20.79MB 26.51k 9.87k 56.70k 62.15% 5.86ms 6.68ms 65.32ms 87.91% 3.64ms 7.83ms 14.01ms 32.29ms
bin/server_python_sanic http://127.0.0.1:3000/user 0 510266 164997.56 57.91MB 18.73MB 23.97k 8.55k 53.30k 70.42% 6.24ms 6.54ms 45.73ms 84.60% 3.81ms 9.88ms 15.63ms 26.54ms
bin/server_python_sanic http://127.0.0.1:3000/user/0 0 536255 173306.94 76.20MB 24.63MB 25.55k 10.34k 98.54k 75.71% 6.16ms 7.05ms 73.26ms 85.78% 3.71ms 9.01ms 15.53ms 31.60ms
bin/server_ruby_rack-routing http://127.0.0.1:3000/ 0 15581 5106.83 578.20KB 189.51KB 652.08 225.59 2.39k 73.75% 3.07ms 5.15ms 63.66ms 87.86% 229.00us 4.11ms 9.35ms 23.83ms
bin/server_ruby_rack-routing http://127.0.0.1:3000/user 0 13187 4354.85 489.36KB 161.61KB 630.70 247.72 1.57k 71.90% 3.63ms 6.15ms 105.00ms 87.94% 272.00us 4.71ms 11.11ms 27.36ms
bin/server_ruby_rack-routing http://127.0.0.1:3000/user/0 0 12674 4154.56 841.63KB 275.89KB 530.33 167.57 1.05k 70.00% 3.78ms 5.12ms 44.63ms 86.11% 1.66ms 5.61ms 10.39ms 23.01ms
bin/server_ruby_rails http://127.0.0.1:3000/ 0 1892 617.14 323.34KB 105.47KB 126.52 9.01 141.00 82.00% 7.92ms 0.99ms 20.96ms 82.45% 7.83ms 8.19ms 8.88ms 10.83ms
bin/server_ruby_rails http://127.0.0.1:3000/user 0 1909 626.2 326.25KB 107.02KB 127.67 8.00 141.00 78.00% 7.85ms 0.87ms 19.07ms 80.20% 7.74ms 8.18ms 8.78ms 10.16ms
bin/server_ruby_rails http://127.0.0.1:3000/user/0 0 1645 538.94 477.11KB 156.31KB 110.07 8.45 121.00 54.00% 9.11ms 1.10ms 24.68ms 86.81% 8.94ms 9.36ms 10.16ms 11.61ms
bin/server_ruby_roda http://127.0.0.1:3000/ 0 18971 6182.04 1.14MB 380.34KB 794.31 410.49 2.98k 70.00% 2.53ms 3.55ms 45.61ms 87.40% 1.00ms 3.53ms 6.95ms 15.96ms
bin/server_ruby_roda http://127.0.0.1:3000/user 0 17480 5764.35 1.05MB 354.64KB 836.16 378.59 1.95k 59.52% 2.74ms 3.80ms 57.23ms 86.70% 1.08ms 4.01ms 7.66ms 16.97ms
bin/server_ruby_roda http://127.0.0.1:3000/user/0 0 15825 5176.58 1.40MB 470.14KB 662.17 216.84 1.28k 71.67% 3.03ms 3.22ms 44.14ms 86.21% 2.13ms 4.37ms 7.28ms 14.58ms
bin/server_ruby_sinatra http://127.0.0.1:3000/ 0 6614 2155.96 1.08MB 362.13KB 276.70 113.62 630.00 64.58% 7.23ms 10.12ms 99.04ms 87.30% 2.93ms 10.27ms 20.08ms 45.16ms
bin/server_ruby_sinatra http://127.0.0.1:3000/user 0 6158 2025.38 1.01MB 340.20KB 257.51 131.19 700.00 70.00% 7.74ms 10.93ms 106.87ms 87.24% 3.07ms 11.22ms 21.34ms 50.10ms
bin/server_ruby_sinatra http://127.0.0.1:3000/user/0 0 5742 1874.34 1.11MB 369.74KB 240.25 98.25 570.00 68.33% 8.33ms 10.14ms 89.79ms 86.69% 4.72ms 12.15ms 21.62ms 45.22ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 1194963 389680.23 85.47MB 27.87MB 57.21k 36.04k 111.32k 46.19% 261.35us 218.87us 12.48ms 94.12% 228.00us 327.00us 409.00us 783.00us
bin/server_rust_iron http://127.0.0.1:3000/user 0 1162395 379615.81 83.14MB 27.15MB 64.95k 32.42k 115.22k 65.56% 274.64us 310.17us 17.95ms 96.17% 233.00us 338.00us 447.00us 0.88ms
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 1033462 337621.79 129.11MB 42.18MB 57.74k 38.63k 114.12k 45.56% 305.27us 407.82us 59.30ms 97.04% 247.00us 374.00us 492.00us 1.02ms
bin/server_rust_nickel http://127.0.0.1:3000/ 0 897908 296861.67 111.32MB 36.80MB 150.51k 4.86k 169.14k 81.67% 47.12us 27.40us 8.02ms 82.55% 38.00us 49.00us 88.00us 98.00us
bin/server_rust_nickel http://127.0.0.1:3000/user 0 780844 258500.35 96.81MB 32.05MB 130.82k 6.35k 142.88k 70.00% 56.78us 80.69us 7.92ms 99.89% 59.00us 69.00us 78.00us 93.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 871718 284436.61 137.17MB 44.76MB 146.17k 4.00k 161.84k 81.67% 49.32us 41.81us 11.86ms 90.70% 39.00us 52.00us 91.00us 102.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 843192 276591.06 73.18MB 24.00MB 94.23k 46.20k 143.93k 62.22% 76.36us 110.25us 8.15ms 97.94% 61.00us 88.00us 130.00us 200.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 981432 324412.45 85.17MB 28.15MB 109.70k 20.77k 142.03k 64.44% 74.96us 166.54us 12.12ms 99.57% 58.00us 74.00us 121.00us 185.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 989935 325112.38 152.94MB 50.23MB 110.64k 25.59k 149.79k 48.89% 79.88us 227.28us 11.99ms 99.29% 63.00us 79.00us 94.00us 209.00us

Rankings

Ranking by Average Requests per second:

  1. 674824 req/sec : bin/server_cpp_evhtp
  2. 497445 req/sec : bin/server_go_fasthttprouter
  3. 368972 req/sec : bin/server_rust_iron
  4. 308705 req/sec : bin/server_rust_rocket
  5. 293377 req/sec : bin/server_go_iris
  6. 279932 req/sec : bin/server_rust_nickel
  7. 262435 req/sec : bin/server_go_echo
  8. 236470 req/sec : bin/server_go_gorilla_mux
  9. 217328 req/sec : bin/server_go_gin
  10. 194851 req/sec : bin/server_node_clusterpolka
  11. 173841 req/sec : bin/server_python_sanic
  12. 130242 req/sec : bin/server_elixir_plug
  13. 119732 req/sec : bin/server_elixir_phoenix
  14. 107889 req/sec : bin/server_python_japronto
  15. 99828 req/sec : bin/server_node_clusterexpress
  16. 68038 req/sec : bin/server_crystal_raze
  17. 64304 req/sec : bin/server_crystal_router_cr
  18. 53314 req/sec : bin/server_crystal_lucky
  19. 44360 req/sec : bin/server_crystal_kemal
  20. 24005 req/sec : bin/server_node_polka
  21. 11077 req/sec : bin/server_node_express
  22. 5707 req/sec : bin/server_ruby_roda
  23. 4538 req/sec : bin/server_ruby_rack-routing
  24. 2018 req/sec : bin/server_ruby_sinatra
  25. 978 req/sec : bin/server_python_flask.py
  26. 763 req/sec : bin/server_python_flask
  27. 669 req/sec : bin/server_python_django
  28. 594 req/sec : bin/server_ruby_rails
  29. -1 req/sec : bin/server_crystal_amber
OvermindDL1 commented 6 years ago

For note, amber fails to run because of:

╰─➤  bin/server_crystal_amber 
Environment file not found for ./config/environments/production (Amber::Exceptions::Environment)
  from ???
  from crystal/amber/lib/amber/src/amber.cr:24:3 in '__crystal_main'
  from /usr/share/crystal/src/crystal/main.cr:0:3 in 'main'
  from __libc_start_main
  from _start
  from ???

I'm guessing this is a bug in this server and it should be corrected (pathing maybe?).

dom96 commented 6 years ago

Still awaiting some Nim results ;)

Here is a quick link for you: https://nim-lang.org/install_unix.html. If you're using a package manager, be sure to verify you got at least nim v0.18.0.

OvermindDL1 commented 6 years ago

@dom96 Oh hey, thanks, you've spurred me on to go ahead and install nim then. ^.^

Running the tests on all servers, this will take a while to run after I install nim, will post results when complete. :-)

OvermindDL1 commented 6 years ago

Also decided to install dotnet too, and wow that csharp server was a pain to get running, dependency after dependency after dependency that it does not acquire itself and just assumes (you know what they say about assuming ;-) ) that they are all installed globally. Doesn't dotnetcore have a dependency management system like decent languages? o.O

Tests are finally running now, will post when complete...

OvermindDL1 commented 6 years ago

Wow! Initial tests show that nim is fast, like whupping everything but C++ itself, I'm curious to see how everything will fair when the final results come in!

OvermindDL1 commented 6 years ago

Oy, well one of the nim frameworks is super fast, the other is abysmally slow, and I'm surprised just how poor dotnet is doing considering it is a JIT'd language (it's even beat by Elixir, which is a bytecode interpreted language!), probably just a really poorly made framework:

╰─➤ ../stats.exs -w 1 -d 3 _
Total Cores: 16 Concurrent Connections: 1000

Processing servers:

Processing: bin/server_cpp_evhtp Processing: bin/server_crystal_amber unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

Processing: bin/server_crystal_kemal Processing: bin/server_crystal_lucky Processing: bin/server_crystal_raze Processing: bin/server_crystal_router_cr Processing: bin/server_csharp_aspnetcore Processing: bin/server_elixir_phoenix Processing: bin/server_elixir_plug Processing: bin/server_go_echo Processing: bin/server_go_fasthttprouter Processing: bin/server_go_gin Processing: bin/server_go_gorilla_mux Processing: bin/server_go_iris Processing: bin/server_nim_jester Processing: bin/server_nim_mofuw Processing: bin/server_node_clusterexpress Processing: bin/server_node_clusterpolka Processing: bin/server_node_express Processing: bin/server_node_polka Processing: bin/server_python_django Processing: bin/server_python_flask Processing: bin/server_python_flask.py Processing: bin/server_python_japronto Processing: bin/server_python_sanic Processing: bin/server_ruby_rack-routing Processing: bin/server_ruby_rails Processing: bin/server_ruby_roda Processing: bin/server_ruby_sinatra Processing: bin/server_rust_iron Processing: bin/server_rust_nickel Processing: bin/server_rust_rocket

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_cpp_evhtp http://127.0.0.1:3000/ 0 2156132 705937.67 131.60MB 43.09MB 90.19k 27.93k 127.42k 65.83% 2.27ms 3.58ms 205.00ms 88.00% 737.00us 2.23ms 6.91ms 15.64ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user 0 2045693 672015.9 124.86MB 41.02MB 85.52k 23.76k 127.92k 57.50% 2.12ms 3.21ms 216.46ms 88.70% 751.00us 2.40ms 5.81ms 13.83ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user/0 0 2029523 663386.33 181.94MB 59.47MB 84.87k 22.85k 121.17k 57.50% 2.10ms 3.09ms 204.78ms 88.46% 749.00us 2.29ms 5.80ms 14.08ms
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 180744 59355.88 18.62MB 6.11MB 7.57k 743.38 8.70k 80.42% 16.65ms 4.70ms 59.28ms 88.20% 13.89ms 20.80ms 21.63ms 29.21ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 141240 46747.22 14.55MB 4.81MB 5.91k 0.88k 8.71k 77.08% 20.20ms 8.01ms 227.16ms 94.81% 20.71ms 24.05ms 24.57ms 31.00ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 121486 39714.25 15.99MB 5.23MB 5.08k 631.49 6.71k 73.75% 23.51ms 6.13ms 230.42ms 75.21% 25.36ms 26.08ms 27.92ms 33.63ms
bin/server_crystal_lucky http://127.0.0.1:3000/ 0 176189 57726.06 13.11MB 4.29MB 7.37k 578.14 8.81k 74.17% 16.46ms 3.95ms 30.37ms 65.87% 15.09ms 20.01ms 20.84ms 26.10ms
bin/server_crystal_lucky http://127.0.0.1:3000/user 0 149844 49541.12 11.15MB 3.69MB 6.27k 362.60 7.59k 76.67% 19.56ms 3.95ms 31.88ms 61.46% 21.22ms 22.41ms 22.94ms 28.06ms
bin/server_crystal_lucky http://127.0.0.1:3000/user/0 0 153565 50761.87 17.28MB 5.71MB 6.43k 781.17 8.32k 66.25% 18.63ms 4.06ms 29.49ms 61.24% 19.96ms 21.87ms 22.26ms 26.06ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 233135 76288.13 13.78MB 4.51MB 9.76k 786.15 12.50k 72.92% 12.29ms 3.89ms 220.79ms 82.95% 11.20ms 12.19ms 18.16ms 18.82ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 185399 61392.67 10.96MB 3.63MB 7.76k 653.98 9.99k 72.08% 15.50ms 3.76ms 216.45ms 55.24% 13.41ms 19.38ms 20.00ms 22.56ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 175584 57626.32 15.41MB 5.06MB 7.35k 694.44 8.84k 76.67% 16.46ms 3.36ms 26.91ms 53.15% 18.13ms 19.92ms 20.28ms 21.61ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 218501 71695.57 12.92MB 4.24MB 9.15k 683.06 10.11k 80.42% 13.71ms 3.52ms 37.88ms 84.16% 11.56ms 16.90ms 17.55ms 23.78ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 198660 65673.96 11.75MB 3.88MB 8.31k 1.48k 12.28k 76.67% 14.58ms 11.59ms 226.51ms 99.00% 12.43ms 18.04ms 19.46ms 26.10ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 182777 60266.05 16.04MB 5.29MB 7.65k 838.48 8.79k 76.67% 16.02ms 4.21ms 50.41ms 87.15% 13.38ms 19.25ms 20.32ms 26.49ms
bin/server_csharp_aspnetcore http://127.0.0.1:3000/ 0 378524 124730.41 38.26MB 12.61MB 15.83k 3.70k 25.83k 68.75% 9.63ms 25.53ms 457.99ms 98.18% 6.95ms 10.26ms 14.09ms 133.66ms
bin/server_csharp_aspnetcore http://127.0.0.1:3000/user 0 333324 109888.1 33.70MB 11.11MB 13.95k 4.26k 27.28k 72.50% 8.38ms 12.69ms 236.92ms 96.51% 7.77ms 10.60ms 15.26ms 31.31ms
bin/server_csharp_aspnetcore http://127.0.0.1:3000/user/0 0 306721 100775.99 41.24MB 13.55MB 12.83k 3.70k 27.89k 72.08% 9.41ms 14.55ms 248.14ms 96.81% 8.12ms 11.05ms 17.44ms 43.06ms
bin/server_elixir_phoenix http://127.0.0.1:3000/ 0 392165 127368.81 53.48MB 17.37MB 16.36k 2.79k 24.13k 69.17% 7.96ms 13.60ms 258.86ms 96.98% 7.08ms 11.53ms 16.03ms 28.81ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user 0 342806 112356.8 46.75MB 15.32MB 14.31k 2.97k 22.12k 67.50% 9.11ms 13.55ms 248.43ms 95.16% 8.39ms 13.53ms 18.73ms 33.42ms
bin/server_elixir_phoenix http://127.0.0.1:3000/user/0 0 361732 117508.71 59.68MB 19.39MB 15.08k 3.51k 30.93k 67.50% 9.23ms 15.68ms 247.18ms 95.77% 7.76ms 13.64ms 19.63ms 41.16ms
bin/server_elixir_plug http://127.0.0.1:3000/ 0 405226 131613.59 55.26MB 17.95MB 16.93k 2.30k 24.00k 70.00% 8.06ms 13.98ms 228.96ms 97.61% 7.09ms 10.97ms 15.15ms 30.30ms
bin/server_elixir_plug http://127.0.0.1:3000/user 0 392856 129104.6 53.58MB 17.61MB 16.38k 2.71k 22.03k 68.75% 8.71ms 14.30ms 231.07ms 96.33% 7.91ms 12.49ms 17.58ms 34.64ms
bin/server_elixir_plug http://127.0.0.1:3000/user/0 0 374981 122544.93 61.51MB 20.10MB 15.66k 2.20k 21.16k 67.50% 8.32ms 13.38ms 225.04ms 97.03% 7.33ms 11.59ms 16.01ms 30.10ms
bin/server_go_echo http://127.0.0.1:3000/ 0 819571 264847.72 90.67MB 29.30MB 34.04k 4.84k 52.41k 70.42% 3.58ms 7.19ms 215.66ms 97.69% 2.50ms 4.45ms 6.57ms 14.80ms
bin/server_go_echo http://127.0.0.1:3000/user 0 807222 265386.98 89.30MB 29.36MB 33.64k 6.63k 53.95k 69.17% 4.34ms 11.17ms 221.52ms 97.64% 2.41ms 4.65ms 7.67ms 23.99ms
bin/server_go_echo http://127.0.0.1:3000/user/0 0 785742 255415.71 109.40MB 35.56MB 32.68k 4.90k 51.22k 72.92% 3.48ms 4.93ms 204.84ms 95.48% 2.61ms 4.66ms 6.75ms 11.88ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/ 0 1621931 527439.74 143.85MB 46.78MB 67.60k 14.16k 115.33k 69.17% 2.04ms 6.78ms 207.12ms 98.96% 1.16ms 1.97ms 3.59ms 8.91ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user 0 1526712 502096.08 135.41MB 44.53MB 63.65k 13.35k 103.73k 65.83% 1.92ms 4.29ms 209.18ms 97.39% 1.23ms 2.14ms 3.68ms 8.49ms
bin/server_go_fasthttprouter http://127.0.0.1:3000/user/0 0 1444057 465506.19 225.85MB 72.81MB 61.11k 14.88k 117.29k 70.34% 1.85ms 2.34ms 205.80ms 91.16% 1.22ms 2.20ms 3.91ms 8.65ms
bin/server_go_gin http://127.0.0.1:3000/ 0 612884 199074.99 67.80MB 22.02MB 25.51k 4.58k 46.50k 69.17% 4.97ms 8.14ms 208.75ms 95.82% 3.67ms 6.01ms 9.10ms 23.62ms
bin/server_go_gin http://127.0.0.1:3000/user 0 591529 193788.08 65.44MB 21.44MB 24.62k 5.02k 39.03k 64.58% 6.66ms 14.53ms 411.65ms 95.60% 3.67ms 6.91ms 13.00ms 46.83ms
bin/server_go_gin http://127.0.0.1:3000/user/0 0 607260 197618.21 84.55MB 27.52MB 25.27k 4.29k 37.62k 70.42% 5.66ms 11.72ms 222.35ms 96.43% 3.56ms 6.26ms 10.21ms 35.96ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/ 0 775874 253425.31 85.83MB 28.04MB 32.35k 4.69k 52.35k 68.75% 3.98ms 9.85ms 215.92ms 98.89% 2.68ms 4.52ms 6.39ms 14.63ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user 0 761568 249912.71 84.25MB 27.65MB 31.72k 6.29k 52.76k 73.75% 4.17ms 8.70ms 212.63ms 96.56% 2.59ms 4.84ms 7.58ms 22.54ms
bin/server_go_gorilla_mux http://127.0.0.1:3000/user/0 0 678855 219975.73 93.23MB 30.21MB 28.27k 3.50k 43.58k 68.75% 4.52ms 8.56ms 209.87ms 97.74% 3.27ms 5.41ms 7.87ms 18.69ms
bin/server_go_iris http://127.0.0.1:3000/ 0 925624 301753.59 102.40MB 33.38MB 38.49k 7.09k 67.67k 72.08% 3.84ms 11.59ms 211.21ms 98.76% 2.21ms 3.86ms 6.11ms 19.89ms
bin/server_go_iris http://127.0.0.1:3000/user 0 908462 296528.82 100.50MB 32.80MB 37.82k 6.18k 55.85k 68.33% 3.17ms 4.30ms 206.58ms 93.73% 2.29ms 4.05ms 6.31ms 13.02ms
bin/server_go_iris http://127.0.0.1:3000/user/0 0 885129 287740.15 123.24MB 40.06MB 36.80k 6.14k 71.85k 72.92% 4.11ms 12.50ms 212.94ms 98.70% 2.35ms 4.00ms 6.32ms 22.05ms
bin/server_nim_jester http://127.0.0.1:3000/ 0 104348 34268.04 7.66MB 2.52MB 4.37k 1.20k 8.59k 72.50% 67.11ms 202.64ms 1.98s 93.88% 18.81ms 22.42ms 25.69ms 1.16s
bin/server_nim_jester http://127.0.0.1:3000/user 0 86728 28680.98 6.37MB 2.11MB 3.63k 1.29k 6.85k 63.33% 67.98ms 198.61ms 1.97s 94.08% 21.83ms 25.40ms 28.05ms 1.14s
bin/server_nim_jester http://127.0.0.1:3000/user/0 0 98151 32163.86 10.02MB 3.28MB 4.11k 1.08k 6.54k 61.67% 68.95ms 203.43ms 1.97s 93.77% 19.97ms 23.47ms 26.09ms 1.16s
bin/server_nim_mofuw http://127.0.0.1:3000/ 0 1671295 539182.73 218.36MB 70.45MB 70.07k 22.02k 105.93k 59.41% 2.53ms 3.23ms 43.80ms 86.57% 0.88ms 3.43ms 6.93ms 14.61ms
bin/server_nim_mofuw http://127.0.0.1:3000/user 0 1633107 532965.14 213.37MB 69.63MB 68.21k 23.16k 103.35k 55.00% 2.60ms 3.31ms 41.45ms 86.72% 0.91ms 3.53ms 7.04ms 14.93ms
bin/server_nim_mofuw http://127.0.0.1:3000/user/0 0 1501165 484228.34 239.08MB 77.12MB 63.61k 23.52k 120.07k 56.78% 2.58ms 3.10ms 37.81ms 86.16% 1.00ms 3.53ms 6.83ms 13.92ms
bin/server_node_clusterexpress http://127.0.0.1:3000/ 0 318062 102691.44 49.14MB 15.87MB 13.15k 1.16k 17.59k 78.24% 8.74ms 5.69ms 222.79ms 85.92% 7.53ms 9.38ms 15.07ms 21.74ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user 0 317782 103023.11 49.10MB 15.92MB 13.10k 0.91k 16.68k 77.92% 8.99ms 5.80ms 138.44ms 85.88% 7.59ms 10.93ms 15.19ms 20.04ms
bin/server_node_clusterexpress http://127.0.0.1:3000/user/0 0 299576 96774.53 54.85MB 17.72MB 12.41k 0.95k 18.04k 80.83% 9.83ms 7.34ms 161.71ms 95.52% 7.76ms 11.66ms 15.51ms 23.78ms
bin/server_node_clusterpolka http://127.0.0.1:3000/ 0 645788 209503.08 60.97MB 19.78MB 26.90k 9.70k 60.35k 56.67% 4.48ms 6.63ms 226.78ms 94.30% 3.20ms 5.58ms 7.77ms 19.59ms
bin/server_node_clusterpolka http://127.0.0.1:3000/user 0 593863 191684.9 56.07MB 18.10MB 24.64k 8.42k 56.39k 70.00% 4.70ms 3.70ms 68.53ms 83.68% 3.63ms 7.06ms 7.72ms 18.28ms
bin/server_node_clusterpolka http://127.0.0.1:3000/user/0 0 570068 183965.9 70.13MB 22.63MB 23.65k 7.04k 50.45k 70.42% 6.09ms 9.73ms 175.25ms 96.31% 4.00ms 7.13ms 9.27ms 46.69ms
bin/server_node_express http://127.0.0.1:3000/ 0 34993 11511.97 5.41MB 1.78MB 1.46k 280.53 2.04k 68.33% 60.17ms 33.93ms 570.70ms 97.65% 66.44ms 70.94ms 71.24ms 200.86ms
bin/server_node_express http://127.0.0.1:3000/user 0 33819 11198.21 5.22MB 1.73MB 1.42k 214.86 2.02k 72.92% 84.16ms 99.75ms 1.08s 95.66% 82.90ms 87.92ms 88.56ms 611.26ms
bin/server_node_express http://127.0.0.1:3000/user/0 0 32196 10591.63 5.90MB 1.94MB 1.35k 184.29 1.96k 71.67% 75.17ms 17.14ms 399.10ms 94.00% 78.91ms 80.32ms 80.56ms 105.86ms
bin/server_node_polka http://127.0.0.1:3000/ 0 76015 24987.94 7.18MB 2.36MB 3.18k 343.50 4.29k 75.42% 37.98ms 37.48ms 512.75ms 97.79% 37.73ms 38.35ms 40.62ms 250.85ms
bin/server_node_polka http://127.0.0.1:3000/user 0 70009 23143.53 6.61MB 2.19MB 2.93k 0.90k 7.92k 78.33% 40.43ms 47.99ms 548.47ms 96.88% 40.91ms 42.31ms 45.05ms 304.40ms
bin/server_node_polka http://127.0.0.1:3000/user/0 0 65674 21601.55 8.08MB 2.66MB 2.75k 340.76 3.97k 70.42% 43.86ms 35.44ms 548.26ms 97.57% 43.59ms 44.37ms 46.98ms 236.18ms
bin/server_python_django http://127.0.0.1:3000/ 2009 2009 662.34 478.71KB 157.82KB 131.60 93.46 390.00 70.00% 189.21ms 126.89ms 1.67s 91.19% 161.77ms 162.11ms 168.71ms 648.35ms
bin/server_python_django http://127.0.0.1:3000/user 1390 1390 457.19 331.21KB 108.94KB 78.47 55.33 232.00 65.24% 251.68ms 214.92ms 1.82s 80.79% 169.18ms 191.07ms 653.37ms 990.28ms
bin/server_python_django http://127.0.0.1:3000/user/0 1739 1739 574.2 414.37KB 136.82KB 84.44 78.37 505.00 86.87% 193.83ms 154.23ms 1.67s 90.97% 167.15ms 168.41ms 323.15ms 661.44ms
bin/server_python_flask http://127.0.0.1:3000/ 2400 2400 792.29 571.88KB 188.79KB 103.10 77.09 310.00 74.89% 137.11ms 37.08ms 982.96ms 74.38% 150.92ms 151.64ms 152.36ms 203.48ms
bin/server_python_flask http://127.0.0.1:3000/user 1917 1917 634.62 456.79KB 151.22KB 100.57 98.21 424.00 82.80% 179.99ms 143.72ms 1.82s 92.96% 160.01ms 161.39ms 173.67ms 650.35ms
bin/server_python_flask http://127.0.0.1:3000/user/0 2239 2239 739.73 533.51KB 176.26KB 98.72 44.05 171.00 66.37% 115.38ms 58.76ms 937.90ms 95.49% 106.06ms 106.54ms 107.33ms 330.52ms
bin/server_python_flask.py http://127.0.0.1:3000/ 0 6570 2157.47 0.96MB 322.36KB 420.35 211.76 0.87k 66.89% 54.86ms 84.03ms 1.71s 96.47% 45.96ms 46.33ms 46.55ms 530.84ms
bin/server_python_flask.py http://127.0.0.1:3000/user 0 3863 1247.86 577.19KB 186.45KB 241.25 135.24 555.00 67.11% 95.27ms 160.02ms 1.66s 93.09% 49.03ms 56.90ms 69.50ms 683.14ms
bin/server_python_flask.py http://127.0.0.1:3000/user/0 0 5994 1945.56 1.05MB 347.70KB 277.92 152.44 613.00 61.06% 54.43ms 57.86ms 882.16ms 94.98% 44.32ms 49.48ms 54.78ms 301.67ms
bin/server_python_japronto http://127.0.0.1:3000/ 0 351606 113929.6 26.49MB 8.58MB 15.77k 4.32k 60.80k 95.98% 7.94ms 1.42ms 24.67ms 91.49% 8.30ms 8.38ms 8.51ms 9.04ms
bin/server_python_japronto http://127.0.0.1:3000/user 0 341686 110321.4 25.74MB 8.31MB 14.80k 3.30k 36.56k 96.55% 8.47ms 1.50ms 18.28ms 91.15% 8.72ms 8.95ms 9.34ms 10.04ms
bin/server_python_japronto http://127.0.0.1:3000/user/0 0 312898 100973.34 32.53MB 10.50MB 14.04k 6.19k 71.09k 95.98% 8.93ms 2.38ms 19.28ms 86.98% 9.55ms 10.01ms 10.24ms 12.86ms
bin/server_python_sanic http://127.0.0.1:3000/ 0 580624 187388.49 65.89MB 21.27MB 27.42k 11.10k 72.61k 66.98% 5.66ms 6.19ms 62.27ms 85.36% 3.56ms 8.12ms 14.45ms 26.23ms
bin/server_python_sanic http://127.0.0.1:3000/user 0 554967 179550.77 62.98MB 20.38MB 25.93k 10.25k 100.85k 78.50% 5.34ms 5.09ms 59.48ms 87.21% 3.70ms 7.43ms 11.47ms 24.14ms
bin/server_python_sanic http://127.0.0.1:3000/user/0 0 567336 183433.45 80.62MB 26.07MB 26.80k 10.78k 84.82k 67.92% 5.28ms 5.13ms 44.22ms 85.32% 3.68ms 7.58ms 12.10ms 23.16ms
bin/server_ruby_rack-routing http://127.0.0.1:3000/ 0 15179 4951.28 563.28KB 183.74KB 635.38 339.65 1.91k 74.58% 3.15ms 5.25ms 89.85ms 87.96% 244.00us 4.18ms 9.57ms 23.86ms
bin/server_ruby_rack-routing http://127.0.0.1:3000/user 0 13006 4272.23 482.64KB 158.54KB 622.16 332.39 1.99k 70.48% 3.69ms 5.45ms 63.49ms 87.51% 1.35ms 5.17ms 10.45ms 24.99ms
bin/server_ruby_rack-routing http://127.0.0.1:3000/user/0 0 12338 4011.15 819.32KB 266.37KB 516.25 187.29 1.32k 69.17% 3.88ms 5.03ms 51.09ms 86.64% 1.99ms 5.73ms 10.35ms 22.49ms
bin/server_ruby_rails http://127.0.0.1:3000/ 0 1875 613.3 320.43KB 104.81KB 125.37 9.19 141.00 84.00% 7.99ms 1.32ms 29.69ms 90.56% 7.79ms 8.14ms 8.87ms 10.92ms
bin/server_ruby_rails http://127.0.0.1:3000/user 0 1904 628.44 325.39KB 107.40KB 127.39 10.26 151.00 70.67% 7.87ms 1.01ms 22.48ms 85.24% 7.79ms 8.25ms 8.79ms 10.04ms
bin/server_ruby_rails http://127.0.0.1:3000/user/0 0 1657 542.23 480.59KB 157.27KB 110.92 9.06 131.00 50.67% 9.04ms 1.34ms 31.06ms 91.67% 8.85ms 9.33ms 10.12ms 11.67ms
bin/server_ruby_roda http://127.0.0.1:3000/ 0 18740 6098.28 1.13MB 375.19KB 784.14 305.62 2.28k 73.33% 2.56ms 3.68ms 34.64ms 85.97% 0.91ms 3.70ms 7.45ms 16.09ms
bin/server_ruby_roda http://127.0.0.1:3000/user 0 17809 5864.87 1.07MB 360.83KB 744.92 309.04 2.21k 72.92% 2.69ms 3.64ms 47.11ms 86.84% 1.10ms 3.95ms 7.39ms 15.84ms
bin/server_ruby_roda http://127.0.0.1:3000/user/0 0 15445 5022.63 1.36MB 451.25KB 646.34 116.34 1.02k 74.17% 3.10ms 3.51ms 34.21ms 86.05% 2.00ms 4.55ms 7.71ms 15.43ms
bin/server_ruby_sinatra http://127.0.0.1:3000/ 0 6785 2222.48 1.11MB 373.31KB 283.81 129.05 830.00 71.25% 7.05ms 10.10ms 94.58ms 86.75% 2.67ms 10.21ms 20.15ms 45.19ms
bin/server_ruby_sinatra http://127.0.0.1:3000/user 0 6105 2003.0 1.00MB 336.44KB 255.30 97.98 660.00 73.75% 7.83ms 10.76ms 160.95ms 87.26% 3.31ms 11.58ms 21.03ms 46.81ms
bin/server_ruby_sinatra http://127.0.0.1:3000/user/0 0 5760 1879.4 1.11MB 370.74KB 240.86 96.47 510.00 70.42% 8.31ms 10.74ms 98.79ms 85.99% 4.15ms 12.54ms 22.77ms 47.71ms
bin/server_rust_iron http://127.0.0.1:3000/ 0 1188777 387991.67 85.03MB 27.75MB 56.88k 38.75k 116.29k 44.29% 261.99us 287.77us 20.67ms 96.25% 221.00us 321.00us 411.00us 813.00us
bin/server_rust_iron http://127.0.0.1:3000/user 0 1134025 372690.66 81.11MB 26.66MB 63.33k 38.46k 118.83k 49.44% 259.09us 1.03ms 210.33ms 99.79% 210.00us 316.00us 400.00us 808.00us
bin/server_rust_iron http://127.0.0.1:3000/user/0 0 1057872 344931.0 132.16MB 43.09MB 44.31k 28.36k 105.51k 55.83% 326.64us 273.32us 27.81ms 91.85% 301.00us 419.00us 542.00us 1.05ms
bin/server_rust_nickel http://127.0.0.1:3000/ 0 1099128 360547.86 136.27MB 44.70MB 122.94k 16.13k 148.69k 54.44% 42.98us 64.37us 12.15ms 99.90% 39.00us 49.00us 70.00us 82.00us
bin/server_rust_nickel http://127.0.0.1:3000/user 0 920631 304764.17 114.14MB 37.78MB 154.26k 3.23k 159.85k 78.33% 47.97us 19.87us 6.96ms 84.82% 55.00us 60.00us 63.00us 73.00us
bin/server_rust_nickel http://127.0.0.1:3000/user/0 0 1067947 348500.72 168.05MB 54.84MB 119.31k 5.50k 129.25k 74.44% 48.61us 92.77us 12.04ms 99.91% 47.00us 55.00us 62.00us 77.00us
bin/server_rust_rocket http://127.0.0.1:3000/ 0 844189 277320.55 73.26MB 24.07MB 94.31k 45.87k 134.78k 66.67% 74.61us 104.76us 10.88ms 99.76% 65.00us 92.00us 123.00us 156.00us
bin/server_rust_rocket http://127.0.0.1:3000/user 0 1083600 358731.21 94.04MB 31.13MB 121.17k 8.30k 138.57k 61.11% 77.38us 265.66us 12.24ms 99.33% 56.00us 68.00us 80.00us 146.00us
bin/server_rust_rocket http://127.0.0.1:3000/user/0 0 754582 247564.57 116.58MB 38.25MB 126.60k 12.62k 148.16k 68.33% 80.26us 89.57us 12.12ms 89.14% 72.00us 100.00us 177.00us 219.00us

Rankings

Ranking by Average Requests per second:

  1. 680446 req/sec : bin/server_cpp_evhtp
  2. 518792 req/sec : bin/server_nim_mofuw
  3. 498347 req/sec : bin/server_go_fasthttprouter
  4. 368537 req/sec : bin/server_rust_iron
  5. 337937 req/sec : bin/server_rust_nickel
  6. 295340 req/sec : bin/server_go_iris
  7. 294538 req/sec : bin/server_rust_rocket
  8. 261883 req/sec : bin/server_go_echo
  9. 241104 req/sec : bin/server_go_gorilla_mux
  10. 196827 req/sec : bin/server_go_gin
  11. 195051 req/sec : bin/server_node_clusterpolka
  12. 183457 req/sec : bin/server_python_sanic
  13. 127754 req/sec : bin/server_elixir_plug
  14. 119078 req/sec : bin/server_elixir_phoenix
  15. 111798 req/sec : bin/server_csharp_aspnetcore
  16. 108408 req/sec : bin/server_python_japronto
  17. 100829 req/sec : bin/server_node_clusterexpress
  18. 65878 req/sec : bin/server_crystal_router_cr
  19. 65102 req/sec : bin/server_crystal_raze
  20. 52676 req/sec : bin/server_crystal_lucky
  21. 48605 req/sec : bin/server_crystal_kemal
  22. 31704 req/sec : bin/server_nim_jester
  23. 23244 req/sec : bin/server_node_polka
  24. 11100 req/sec : bin/server_node_express
  25. 5661 req/sec : bin/server_ruby_roda
  26. 4411 req/sec : bin/server_ruby_rack-routing
  27. 2034 req/sec : bin/server_ruby_sinatra
  28. 1783 req/sec : bin/server_python_flask.py
  29. 722 req/sec : bin/server_python_flask
  30. 594 req/sec : bin/server_ruby_rails
  31. 564 req/sec : bin/server_python_django
  32. -1 req/sec : bin/server_crystal_amber
OvermindDL1 commented 6 years ago

Python's django is missing some urls module that pip doesn't know about so no clue how to install that. Flask using gunicorn is apparently borked, but running flask straight works, no clue what's up there...

OvermindDL1 commented 6 years ago

Setting up scala now (ah been a while, I miss this language, hate the JVM, but scala is fun, and sbt is awesome). I have no clue how to do anything with obj and swift, does anyone have some easy instructions on setting those up and getting them working?

OvermindDL1 commented 6 years ago

I installed every module I could find for python that contains url and django still fails to load django.urls, wonderful design here... >.>

dom96 commented 6 years ago

31704 req/sec : bin/server_nim_jester

I wouldn't call that abysmally slow ;)

That's my framework which I haven't put any optimisation effort into at all yet. That's where https://github.com/dom96/httpbeast comes in. Happy to see mofuw beating me to the punch, it shows what you can achieve if you just put a little effort into optimisation (and winning benchmarks ;)).

CC @2vg. You'll like the results, keep up the awesome work! :)

dom96 commented 6 years ago

Oh and btw. Keep in mind that Jester is single threaded, it does not take advantage of extra cores at all.

OvermindDL1 commented 6 years ago

Aaaand the scala webserver is borked, it tries to start up multiple copies of itself all on the same port consequently crashing... leaving that out then... >.>

OvermindDL1 commented 6 years ago

@dom96 That is a BIG issue then, you need to multi-thread that stuff! ^.^

You want to fix the server for that? :-)

For note, it's still about half (almost) crystal's speed and crystal is single-core too, so add in multi-core to that server and some optimizations and let's get it on up near the top! :-)

OvermindDL1 commented 6 years ago

I was curious, so I set the C++ webserver to single-threaded (I made the source configurable, so I just change the thread count constant at the top of the main.cpp file to be 1 instead of -1 and recompiled) and ran the test again with just cpp and crystal, results:

╰─➤ ../stats.exs -w 1 -d 3 cpp crystal Total Cores: 16 Concurrent Connections: 1000

Processing servers:

Processing: bin/server_cpp_evhtp Processing: bin/server_crystal_amber unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

unable to connect to 127.0.0.1:3000 Connection refused

Processing: bin/server_crystal_kemal Processing: bin/server_crystal_lucky Processing: bin/server_crystal_raze Processing: bin/server_crystal_router_cr

Path URL Errors Total Requests Count Total Requests/s Total Requests Throughput Total Throughput/s Req/s Avg Req/s Stdev Req/s Max Req/s +/- Latency Avg Latency Stdev Latency Max Latency +/- 50% 75% 90% 99%
bin/server_cpp_evhtp http://127.0.0.1:3000/ 0 260933 85452.54 15.93MB 5.22MB 10.92k 431.99 11.36k 77.50% 11.46ms 1.10ms 217.01ms 98.78% 11.40ms 11.54ms 11.69ms 12.70ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user 0 247617 81823.78 15.11MB 4.99MB 10.36k 474.42 11.36k 76.67% 11.81ms 1.17ms 217.14ms 99.59% 12.04ms 12.17ms 12.29ms 12.60ms
bin/server_cpp_evhtp http://127.0.0.1:3000/user/0 0 242518 79602.16 21.74MB 7.14MB 10.16k 304.48 11.36k 80.42% 12.25ms 354.60us 25.84ms 95.49% 12.27ms 12.36ms 12.45ms 12.65ms
bin/server_crystal_kemal http://127.0.0.1:3000/ 0 177555 58424.24 18.29MB 6.02MB 7.43k 1.15k 10.80k 78.75% 16.36ms 14.84ms 452.18ms 98.85% 14.12ms 18.87ms 21.18ms 31.52ms
bin/server_crystal_kemal http://127.0.0.1:3000/user 0 133004 44012.84 13.70MB 4.53MB 5.57k 522.50 6.32k 75.83% 21.86ms 4.00ms 231.14ms 74.77% 23.79ms 24.16ms 24.43ms 26.61ms
bin/server_crystal_kemal http://127.0.0.1:3000/user/0 0 116350 38064.93 15.31MB 5.01MB 4.87k 391.70 5.77k 76.25% 25.08ms 2.60ms 28.77ms 90.22% 25.96ms 26.22ms 26.50ms 28.10ms
bin/server_crystal_lucky http://127.0.0.1:3000/ 0 174762 57498.49 13.00MB 4.28MB 7.32k 379.74 8.34k 70.42% 16.87ms 4.14ms 29.05ms 71.69% 14.79ms 20.33ms 21.34ms 26.82ms
bin/server_crystal_lucky http://127.0.0.1:3000/user 0 154264 51000.93 11.48MB 3.79MB 6.46k 616.74 7.98k 71.67% 18.78ms 4.23ms 228.34ms 62.08% 20.26ms 21.76ms 22.25ms 27.48ms
bin/server_crystal_lucky http://127.0.0.1:3000/user/0 0 151574 49661.73 16.91MB 5.54MB 6.35k 480.72 7.71k 77.50% 18.94ms 4.18ms 30.27ms 60.49% 20.46ms 22.45ms 22.78ms 25.36ms
bin/server_crystal_raze http://127.0.0.1:3000/ 0 212377 69998.25 12.56MB 4.14MB 8.89k 679.65 11.34k 75.00% 13.63ms 3.58ms 26.78ms 72.68% 11.62ms 17.10ms 18.33ms 23.27ms
bin/server_crystal_raze http://127.0.0.1:3000/user 0 181886 60130.17 10.75MB 3.56MB 7.61k 451.57 8.61k 64.58% 15.85ms 3.69ms 29.18ms 68.90% 17.04ms 18.79ms 19.53ms 24.11ms
bin/server_crystal_raze http://127.0.0.1:3000/user/0 0 165348 54445.25 14.51MB 4.78MB 6.92k 470.80 7.94k 74.17% 17.99ms 3.74ms 38.19ms 59.45% 19.70ms 20.24ms 21.24ms 28.43ms
bin/server_crystal_router_cr http://127.0.0.1:3000/ 0 216743 71173.68 12.82MB 4.21MB 9.07k 528.60 10.10k 72.50% 13.72ms 3.31ms 25.20ms 71.47% 11.66ms 17.25ms 17.98ms 22.76ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user 0 185255 61115.7 10.95MB 3.61MB 7.76k 660.98 9.29k 74.17% 15.59ms 3.63ms 27.45ms 63.43% 13.90ms 19.07ms 19.65ms 24.61ms
bin/server_crystal_router_cr http://127.0.0.1:3000/user/0 0 190514 62629.73 16.53MB 5.44MB 7.98k 0.99k 9.76k 70.83% 15.04ms 6.19ms 221.69ms 96.67% 12.78ms 18.77ms 19.49ms 23.22ms

Rankings

Ranking by Average Requests per second:

  1. 82292 req/sec : bin/server_cpp_evhtp
  2. 64973 req/sec : bin/server_crystal_router_cr
  3. 61524 req/sec : bin/server_crystal_raze
  4. 52720 req/sec : bin/server_crystal_lucky
  5. 46834 req/sec : bin/server_crystal_kemal
  6. -1 req/sec : bin/server_crystal_amber
OvermindDL1 commented 6 years ago

So crystal is decent with single-threaded, but considering the C++ code still has locks and I'm not sure the crystal code does, it is still not an accurate test (especially as the C++ code is still a good deal faster).

dom96 commented 6 years ago

@OvermindDL1 To be honest I'm not convinced these benchmarks should mean much for most users. I've been using Jester happily for years and never had any performance problems, the Nim forum (even though it's ugly) has been running in production for years. But yeah, I'll play the benchmark game, I've been meaning to for years as well :)

dom96 commented 6 years ago

Btw I'm very surprised that Rust isn't winning these benchmarks, they're always raving about zero-cost abstractions, what's happening? :)

OvermindDL1 commented 6 years ago

@OvermindDL1 To be honest I'm not convinced these benchmarks should mean much for most users.

Oh indeed, remember what repo this is, it is purely for testing maximal response time and load from servers in entirely unrealistic scenario's, essentially it's only testing framework overhead, 99.9999% of webservers easy will be dominated by the user code, in any case, it's only when the framework is beyond horribly slow (*cough*ruby*cough*python*cough*) that it really starts to matter.

Though a few times it will matter, like with IOT devices where you will potentially have millions upon millions of active connections. :-)

But yeah, I'll play the benchmark game, I've been meaning to for years as well :)

Yep, it's entirely just a fun thing, nothing serious at all. ^.^

I love putting in some concentration at times to really focus on some trivial problem though, it means that I can be quicker at work since I get my focusing out elsewhere. Heh...

Btw I'm very surprised that Rust isn't winning these benchmarks, they're always raving about zero-cost abstractions, what's happening? :)

It's mostly the backends they use. If you check their assembly they are fast, like should be faster than C++ kind of fast, but they are using the normal OS primitives and it doesn't look like any of the rust frameworks are using anything like libevent (though they could, it's a simple C API).

I might make a Rust server sometime if anyone pings me enough about it that uses evhtp from Rust, I'd expect it to be about equal to C++ then.

EDIT: For note, I think both Go and nodejs use libevent. If NIM's mofow framework doesn't use libevent, then I have to say major major kudo's on it's speed!

dom96 commented 6 years ago

EDIT: For note, I think both Go and nodejs use libevent. If NIM's mofow framework doesn't use libevent, then I have to say major major kudo's on it's speed!

It doesn't. It uses asyncdispatch which uses the native operating system's polling API:

All the libraries you mentioned are also using these primitives, perhaps they are very well optimised, but with effort I'm sure Rust could get up to the same speed. I just expected it to be there already since they really care about zero-cost abstractions.

OvermindDL1 commented 6 years ago

I just expected it to be there already since they really care about zero-cost abstractions.

Heh, true, though zero-cost abstractions does not mean that they know the most efficient kernel calls. ^.^;