Apache Bench est un petit outil utile pour tester le temps de réponse d'un webservice, et donc les performances du serveur web. Nous pouvons spécifier le nombre de requêtes à envoyer, l'URL cible, configurer la simultanéité, pour n'en nommer que quelques-uns des paramètres de cet outil.
Bien que de telles charges de travail simulées ne génèrent pas exactement les mêmes données que le trafic réel, il est toujours judicieux de tester avant de passer en production. Peut-être qu'avant de déployer une nouvelle version de l'application, nous pourrions exécuter les tests sur la nouvelle version et comparer les résultats avec les données de test précédentes pour voir si notre application servira plus lentement ou plus rapidement que la dernière version. Avec des tests bien planifiés, cet outil peut montrer les éventuels goulots d'étranglement de l'application et peut fournir des points d'intérêt où nous devrions examiner notre code pour une éventuelle optimisation.
Dans ce didacticiel, nous allons installer Apache Bench sur Red Hat Enterprise Linux 8, ainsi qu'un serveur Web Apache pour exécuter des tests.
Dans ce didacticiel, vous apprendrez :
- Comment installer Apache Bench
- Comment installer le serveur Web httpd et ajouter du contenu de base
- Comment exécuter des tests simples sur le serveur Web
Exécution de tests de performances sur un serveur Web local avec Apache Bench.
Configuration logicielle requise et conventions utilisées
Catégorie | Exigences, conventions ou version du logiciel utilisée |
---|---|
Système | Red Hat Enterprise Linux 8 |
Logiciel | Apache Bench 2.3 |
Autre | Accès privilégié à votre système Linux en tant que root ou via le sudo commande. |
Conventions | # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo commande$ – nécessite que les commandes linux données soient exécutées en tant qu'utilisateur normal non privilégié |
Comment installer apache bench sur Redhat 8 instructions étape par étape
Apache Bench est disponible dans les sources logicielles de base après avoir activé les référentiels de gestion des abonnements avec Apache httpd
serveur Web. Pour tester notre outil, nous allons ajouter du contenu de base au serveur Web, à la fois statique et écrit en php
.
- Pour installer Apache Bench, qui se trouve dans
httpd-tools
package, nous utiliseronsdnf
:# dnf install httpd-tools
- Pour créer un environnement de test, nous utiliserons notre
ab
outil activé, nous allons installer un serveur Web avec prise en charge de php :# dnf install httpd php
- Nous allons ajouter une page HTML statique
/var/www/html/index.html
avec le contenu suivant :<html> <head> <title>Title of the webpage</title> </head> <body> <p>This is a simple html page.</p> </body> </html>
Et une autre page qui aboutit au même contenu, mais qui est écrite en php de manière intentionnellement inutile. Le fichier sera
/var/www/html/index.php
, avec le contenu ci-dessous :<?php echo "<html>\n"; echo "<head>\n"; echo "<title>Title of the webpage</title>\n"; echo "</head>\n"; echo "<body>\n"; echo "<p>This is a simple html page.</p>\n"; echo "</body>\n"; echo "</html>\n"; ?>
Notez que comme nous servons du texte statique, nous n'aurions besoin que d'un seul
echo
, ou pas de php du tout. Nous créons cette page uniquement pour voir la différence dans les temps de réponse. - Nous pouvons démarrer notre serveur Web :
# systemctl start httpd
- Nous n'avons pas besoin de
root
privilèges pour l'analyse comparative. Pour le premier test, nous exécuteronsab
par rapport à la page statiqueindex.html
, fournissant 100 000 requêtes (-n) pour la page dans 10 threads simultanés (-c), dans un délai maximum de 60 secondes (-t). Sur la machine de laboratoire, ce nombre de requêtes sera traité en une minute, mais selon le matériel, cela peut ne pas être suffisant. Notez également que nous avons éliminé le véritable trafic réseau en comparant l'hôte local, et nous poussons la charge de l'exécution des requêtes et de leur traitement sur le même matériel.$ ab -t 60 -n 100000 -c 10 http://localhost/index.html This is ApacheBench, Version 2.3 <$Revision: 1826891
gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking localhost (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requestsServer Software: Apache/2.4.35
Server Hostname: localhost
Server Port: 80Document Path: /index.html
Document Length: 116 bytesConcurrency Level: 10
Time taken for tests: 19.556 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 39600000 bytes
HTML transferred: 11600000 bytes
Requests per second: 5113.63 [#/sec] (mean)
Time per request: 1.956 [ms] (mean)
Time per request: 0.196 [ms] (mean, across all concurrent requests)
Transfer rate: 1977.53 [Kbytes/sec] receivedConnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 3
Processing: 0 2 0.8 2 26
Waiting: 0 1 0.7 1 26
Total: 0 2 0.8 2 26Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 3
95% 3
98% 4
99% 5
100% 26 (longest request)
- Le deuxième test s'exécutera avec le même ensemble de paramètres, mais contre la page php inutile
index.php
.$ ab -t 60 -n 100000 -c 10 http://localhost/index.php This is ApacheBench, Version 2.3 <$Revision: 1826891
gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking localhost (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requestsServer Software: Apache/2.4.35
Server Hostname: localhost
Server Port: 80Document Path: /index2.php
Document Length: 116 bytesConcurrency Level: 10
Time taken for tests: 35.064 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 30700000 bytes
HTML transferred: 11600000 bytes
Requests per second: 2851.89 [#/sec] (mean)
Time per request: 3.506 [ms] (mean)
Time per request: 0.351 [ms] (mean, across all concurrent requests)
Transfer rate: 855.01 [Kbytes/sec] receivedConnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 3
Processing: 1 3 1.2 3 27
Waiting: 0 3 1.2 3 27
Total: 1 3 1.3 3 28Percentage of the requests served within a certain time (ms)
50% 3
66% 4
75% 4
80% 4
90% 5
95% 6
98% 7
99% 7
100% 28 (longest request)
It isn't a big surprise what the results show. The static content is served much faster than the wasteful page that also need to go trough the php interpreter. And with this we have shown in a simple example how the Apache Bench tool can be used to gather statistics on the response time of our webservices.