Linux - Micro tests de performance sur Apache vs NGINX
Alasta 14 Juillet 2015 linux ngnix apache linux shell
Description : Nous allons faire un comparatif de charges entre Apache et NGINX dans un contexte donnée à savoir, VM à VM.
Contexte :
Nous partirons de deux systèmes de base sous CentOS 6 installé.
L’un avec NGINX et Apache d’installé et configuré, l’autre aura l’injecteur de tests.
Il n’y a pas eu d’optimisation sur Apache et NGINX.
Schéma du Lab :
Installation de l’injecteur :
Nous ferons nos tests avec l’outils ab (Apache Bench)
sudo yum install httpd-tools
Page de tests :
Sur la VM hébergeant les services Web :
Apache
Edition du fichier /var/www/html/index.html
<html>
<head>
<title>First Page</title>
</head>
<body>
Welcome foo !
</body>
</html>
NGINX
Edition du fichier /usr/share/nginx/html/index.html
<html>
<head>
<title>First Page</title>
</head>
<body>
Welcome foo !
</body>
</html>
Tests de performances Apache
Démarrer Apache
Sur la VM hébergeant les services Web :
sudo service httpd start
Note : en fonction de la configuration du serveur hébergeant Apache et NGINX, il est peut être necessaire de stop NGINX avant.
Tests de performances
Sur l’injecteur :
ab -n 30000 -c 30 http://192.168.5.40/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.5.40 (be patient)
Completed 3000 requests
Completed 6000 requests
Completed 9000 requests
Completed 12000 requests
Completed 15000 requests
Completed 18000 requests
Completed 21000 requests
Completed 24000 requests
Completed 27000 requests
Completed 30000 requests
Finished 30000 requests
Server Software: Apache/2.2.15
Server Hostname: 192.168.5.40
Server Port: 80
Document Path: /
Document Length: 85 bytes
Concurrency Level: 30
Time taken for tests: 21.949 seconds
Complete requests: 30000
Failed requests: 0
Write errors: 0
Total transferred: 10530000 bytes
HTML transferred: 2550000 bytes
Requests per second: 1366.79 [#/sec] (mean)
Time per request: 21.949 [ms] (mean)
Time per request: 0.732 [ms] (mean, across all concurrent requests)
Transfer rate: 468.50 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 16.3 0 1004
Processing: 1 21 32.3 15 419
Waiting: 0 15 12.0 14 392
Total: 1 22 36.1 15 1021
Percentage of the requests served within a certain time (ms)
50% 15
66% 17
75% 18
80% 19
90% 21
95% 46
98% 164
99% 192
100% 1021 (longest request)
Note :
- -n : nombre de requêtes total à envoyer
- -c : nombre de requêtes parallèle
Notes 2 :
- La commande est à lancer plusieurs fois pour avoir une moyenne dans les résultats.
- Il est interessant de monitorer la CPU/Mémoire/Réseau sur les différents éléments de la chaîne traversée (serveurs, switchs, routeurs, load-balancers, firewalls, …), car c’est peut être l’un d’entre eux qui limite les performances.
Tests de performances NGINX
Démarrer NGINX
Sur la VM hébergeant les services Web :
sudo service httpd stop
sudo service nginx start
Tests de performances
Sur l’injecteur :
ab -n 30000 -c 30 http://192.168.5.40/
iThis is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.5.40 (be patient)
Server Software: nginx/1.8.0
Server Hostname: 192.168.5.40
Server Port: 80
Document Path: /
Document Length: 85 bytes
Concurrency Level: 30
Time taken for tests: 20.294 seconds
Complete requests: 30000
Failed requests: 0
Write errors: 0
Total transferred: 9452835 bytes
HTML transferred: 2550765 bytes
Requests per second: 1478.25 [#/sec] (mean)
Time per request: 20.294 [ms] (mean)
Time per request: 0.676 [ms] (mean, across all concurrent requests)
Transfer rate: 454.87 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 7 179.3 3 7131
Processing: 4 13 136.7 9 7153
Waiting: 3 12 136.8 8 7150
Total: 8 20 225.8 12 7165
Percentage of the requests served within a certain time (ms)
50% 12
66% 13
75% 13
80% 15
90% 17
95% 18
98% 20
99% 22
100% 7165 (longest request)
Résumé
Temps d'execution | Req/s | Temps moy req/s | Log brute | |
---|---|---|---|---|
Test Apache 1 | 38.619s | 776.81 | 1.287ms | log |
Apache 2 | 25.620s | 1170.95 | 0.854ms | log |
Apache 3 | 22.545s | 1330.64 | 0.752ms | log |
Apache 4 | 24.935s | 1203.14 | 0.831ms | log |
NGINX 1 | 20.294s | 1478.25 | 0.676ms | log |
NGINX 2 | 13.062s | 2296.78 | 0.435ms | log |
NGINX 3 | 22.505s | 1333.02 | 0.750ms | log |
NGINX 4 | 22.600s | 1327.45 | 0.753ms | log |
On peut noter que le plus mauvais temps de NGINX et équivalent au meilleur temps Apache.
Il pourrait être interessant de refaire des tests avec PHP et MySQL pour voir les différents tests.