Let’s put the nginx, Tornado and Apache and see who is the winner.
What to test:
A simple Hello World webpage.
How:
ab -n 10000 -c 300 http://myserver.ip
Test Environment:
OS: Ubuntu 9.10 (32-bit) / Linux 2.6.31
CPU: Pentium Celeron M 1.5 GHz
Ram: 512 MB
Apache: 2.2.12
PHP: 5.2.10
Python: 2.6
Tornado: 0.2
nginx: 0.6.13
Result:
Apache
Server Software: Apache/2.2.12 Server Port: 80 Document Path: / Document Length: 13 bytes Concurrency Level: 300 Time taken for tests: 5.295 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 2863146 bytes HTML transferred: 130143 bytes Requests per second: 1888.58 [#/sec] (mean) Time per request: 158.850 [ms] (mean) Time per request: 0.529 [ms] (mean, across all concurrent requests) Transfer rate: 528.05 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 8 151.0 0 3028 Processing: 0 122 602.0 48 5289 Waiting: 0 122 600.8 48 5284 Total: 10 130 622.1 49 5292 Percentage of the requests served within a certain time (ms) 50% 49 66% 50 75% 50 80% 51 90% 53 95% 63 98% 68 99% 5271 100% 5292 (longest request)
nginx
Server Software: nginx/0.6.13 Server Port: 8000 Document Path: / Document Length: 13 bytes Concurrency Level: 300 Time taken for tests: 3.172 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 2230000 bytes HTML transferred: 130000 bytes Requests per second: 3152.12 [#/sec] (mean) Time per request: 95.174 [ms] (mean) Time per request: 0.317 [ms] (mean, across all concurrent requests) Transfer rate: 686.45 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 2 68.3 0 3057 Processing: 0 70 359.1 27 3164 Waiting: 0 70 359.1 26 3164 Total: 10 72 365.6 27 3169 Percentage of the requests served within a certain time (ms) 50% 27 66% 27 75% 27 80% 27 90% 28 95% 29 98% 32 99% 3157 100% 3169 (longest request)
Tornado Web:
Server Software: TornadoServer/0.1 Server Port: 8888 Document Path: / Document Length: 12 bytes Concurrency Level: 300 Time taken for tests: 5.109 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 1680000 bytes HTML transferred: 120000 bytes Requests per second: 1957.33 [#/sec] (mean) Time per request: 153.270 [ms] (mean) Time per request: 0.511 [ms] (mean, across all concurrent requests) Transfer rate: 321.12 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 32 309.3 0 3035 Processing: 33 103 28.5 103 375 Waiting: 33 102 28.5 103 375 Total: 36 135 311.3 103 3154 Percentage of the requests served within a certain time (ms) 50% 103 66% 105 75% 108 80% 112 90% 116 95% 126 98% 313 99% 3121 100% 3154 (longest request)
What do these numbers mean?
In a given time, if nginx and Tornado Web can handle 1.66 and 1.036 times more requests than Apache, respectively! In the other words, the server is more efficient and it can use the saved resource to do something else!
–Derrick
Our sponsors:
Your blog is so informative ¡ keep up the good work!!!!
hi,The Burden of your blog is very Suit to me, I hope more interflow with you this Topic.
I am extremely influenced together with your site because smartly with the framework for your blog. Is this fact a compensated concept or have you customize it your self? In either case keep up the superb quality composing, it is uncommon to see a great blog such as this one these days.
It looks like nginx still faster than apache and tornado. A interesting test would be Nginx + Django vs Tornado, with a real world application.
If I get some time I’ll try it. I’ll send you the results if I do so. 🙂