Webserver benchmark: Nginx vs Apache vs Lighttpd


La calura estiva porta a momenti di creatività quando non si può andare in spiaggia, ed è così che oggi al freschino di casa ho deciso di fare un po’ di benchmarking fra tre dei più noti webserver in ciroclazione Nginx, Apache e Lighttpd.

Per fare i test ho utilizzato il solito VPS offertomi da OVH con 128MB di ram, 5GB di disco e CPU AMD Opteron(tm) Processor 6172.

Per effettuare i test ho utilizzato un backup del mio sito, importato sulla macchina in questione, ho riconfigurato all’occorrenza il server per il webserver che volevo testare, poi ho utilizzato il programma ab per effettuare il banchmark, lanciandolo da un altro webserver in mio possesso collegato con una 100Mbit.

Per i tre webserver ho utilizzato il comando:

[email protected]# ab -n 1000 -c 5 http://test.temporini.net/

Verranno quindi inviate 1000 richieste, inviando 5 richieste contemporaneamente.

Ecco di seguito i risultati

1- Nginx

Server Software:        nginx/0.7.67
Server Hostname:        test.temporini.net
Server Port:            80

Document Path:          /
Document Length:        47256 bytes

Concurrency Level:      5
Time taken for tests:   470.630 seconds
Complete requests:      1000
Failed requests:        508
(Connect: 0, Receive: 0, Length: 508, Exceptions: 0)
Write errors:           0
Non-2xx responses:      508
Total transferred:      23739772 bytes
HTML transferred:       23337836 bytes
Requests per second:    2.12 [#/sec] (mean)
Time per request:       2353.152 [ms] (mean)
Time per request:       470.630 [ms] (mean, across all concurrent requests)
Transfer rate:          49.26 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        8    8   0.5      8      21
Processing:     8 2345 2369.4     10    5892
Waiting:        8 2172 2194.5     10    5531
Total:         16 2353 2369.5     18    5900

Percentage of the requests served within a certain time (ms)
50%     18
66%   4671
75%   4711
80%   4728
90%   4777
95%   4854
98%   5550
99%   5581
100%   5900 (longest request)

2- Apache

Server Software:        Apache/2.2.16
Server Hostname:        test.temporini.net
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      5
Time taken for tests:   235.989 seconds
Complete requests:      1000
Failed requests:        56
(Connect: 0, Receive: 0, Length: 56, Exceptions: 0)
Write errors:           0
Non-2xx responses:      905
Total transferred:      2784503 bytes
HTML transferred:       2529953 bytes
Requests per second:    4.24 [#/sec] (mean)
Time per request:       1179.947 [ms] (mean)
Time per request:       235.989 [ms] (mean, across all concurrent requests)
Transfer rate:          11.52 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        8    8   0.4      8      20
Processing:    13 1170 1892.9    588   13094
Waiting:        0  949 1440.6    582   13094
Total:         21 1179 1892.9    596   13102

Percentage of the requests served within a certain time (ms)
50%    596
66%    696
75%    882
80%    962
90%   3694
95%   6153
98%   8185
99%   8882
100%  13102 (longest request)

In questo caso però i risultati non sono “buoni”, infatti dopo un po’ di richieste il sistema è collassatto ha esaurito tutta la memoria e tutta l’area di swap, fino a che ha iniziato a darmi dei simpatici messaggi e se provavo a lanciare un qualunque comando dalla shell mi dava delle risposte del tipo “fork: Cannot allocate memory”.

3- Lighttpd

Server Software:        lighttpd/1.4.28
Server Hostname:        test.temporini.net
Server Port:            80

Document Path:          /
Document Length:        369 bytes

Concurrency Level:      5
Time taken for tests:   1239.770 seconds
Complete requests:      1000
Failed requests:        15
(Connect: 0, Receive: 0, Length: 15, Exceptions: 0)
Write errors:           0
Non-2xx responses:      985
Total transferred:      835899 bytes
HTML transferred:       663429 bytes
Requests per second:    0.81 [#/sec] (mean)
Time per request:       6198.849 [ms] (mean)
Time per request:       1239.770 [ms] (mean, across all concurrent requests)
Transfer rate:          0.66 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        8    8   0.1      8      11
Processing:  3583 6181 1117.3   6166   10795
Waiting:     3583 6169 1114.2   6107   10795
Total:       3591 6190 1117.3   6175   10803

Percentage of the requests served within a certain time (ms)
50%   6175
66%   6596
75%   6901
80%   7153
90%   7639
95%   8172
98%   8679
99%   9024
100%  10803 (longest request)

Conclusioni

Come previsto il migliore è stato Nginx, se contiamo che non avevo abilitato nemmeno la microcode cache, direi che si è comportato molto bene, un po’ più complesso degli altri da configurare però. Anche Lighttpd si è comportato egregiamente, con una configurazione molto più semplice.

Apache in questo caso direi proprio da buttare 😉

, , ,

Una replica a “Webserver benchmark: Nginx vs Apache vs Lighttpd”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Per postare il commento, risolvi il quesito sottostante * Time limit is exhausted. Please reload CAPTCHA.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.