Benchmarkez votre serveur avec ApacheBench
Vous aimez jouer avec les paramètres de votre serveur web (Apache, lighttpd, Nginx, etc.) ou avec votre code source, mais comment savoir si cela a un impact négatif ou positif sur les performances ?
Avant d’entrer dans le vif du sujet, je tenais à préciser que le benchmarking d’une application web ou d’un serveur est une tâche complexe : il ne faut pas penser arriver avec une commande toute prête qui vous donnera un chiffre magique. Il faut comprendre où peuvent se situer les goulots d’étranglements, comprendre le design global, etc.
La fondation Apache a intégré un outil dans son programme : « Apache HTTP server benchmarking tool« , plus communément appelé « Apachebench » (ou encore « ab« ), qui vous permet de savoir combien de requêtes par seconde votre installation est capable de fournir.
Ce qu’il est possible de faire avec Apachebench : simuler du traffic en générant des requêtes HTTP.
Ce qu’il n’est pas possible de faire avec Apachebench : simuler le comportement d’un utilisateur qui visite un site/une application.
Pour installer Apachebench sur Debian/Ubuntu :
$ sudo aptitude install apache2-utils
Pour installer Apachebench sur Red Hat / CentOS : le programme « ab » est installé avec Apache. Pour ceux qui n’ont pas Apache installé :
# yum install httpd
La documentation, et sinon un « man ab » permettra de vous donner rapidement les différents paramètres. Par exemple, pour tester mon blog j’utilise les paramètres suivants :
# ab -t30 -c5 http://www.woueb.net/
- -t : représente la durée du test, soit 30 secondes
- -c : indique le nombre de requêtes concurrentes (simultanées) à utiliser
Voici le résultat sur mon serveur : la valeur la plus importante (entourée en rouge) est le nombre de requêtes par seconde qu’à pu supporter le serveur.
Dans cet exemple, Apachebench va uniquement charger le contenu de la page d’accueil de mon blog (textes, contenus et code html) sans appels extérieurs (images, CSS, Javascript, etc.). J’insiste sur le faire que ce n’est pas représentatif de l’utilisation d’un visiteur normal.
En précisant le paramètre « -w« , le résultat est exporté dans un tableau HTML.
Sinon, un « man ab » vous donnera également un aperçu de la documentation.
Deux types de tests :
- test en local : permet de tester le nombre maximum de requêtes par secondes que le système peut fournir, sans tenir compte de la bande passante.
- test à partir d’un serveur distant : pour tester en « conditions réelles » avec l’influence de la bande passante. Dans ce cas, il est intéressant de prévoir plusieurs tests simultanés et de tenir compte de la bande passante sortante du serveur à partir duquel la commande est lancée.
Quelques conseils :
- ayez une bonne alimentation,
- essayez d’avoir une bonne bande passante entre le serveur testé et le serveur destination,
- relevez la charge de votre serveur web avant, pendant et après le test (CPU, Ram, nombre de processus, load, etc.),
- testez plusieurs pages de votre site/application,
- ne vous contentez pas d’un seul test : faites plusieurs tests d’affilé, ou à différents moments de la journée, et calculez les moyennes.
ApacheBench est donc un outil basique mais qui permet notamment de se rendre compte d’une augmentation (ou d’une diminution) de performances suite à une modification de code, de configuration, de rajout matériel, etc.
Commentaire by Greg — 16 novembre 2010 @ 17:48
Salut,
Rasure moi, tu as testé en local ? car 7000 Req / Sec, c’est juste Hallucinant !
Et puis même, dans tous les cas, c’est hallucinant. Une page blanche presque autant de temps …
Commentaire by Romain — 17 novembre 2010 @ 8:48
@Greg > Oui, oui c’est marqué, c’est en local. Je faisais des tests comparatifs suite aux mises en place de Memcached/APC/Varnish : j’ai donc fait les tests en local pour m’affranchir de la bande passante…
Commentaire by Greg — 17 novembre 2010 @ 10:46
Ah mince, j’ai lu un peu trop vite
Merci
Commentaire by Jean Marc — 7 avril 2011 @ 20:29
Un test comparant Varnish et Appache Traffic Server, G-WAN, Nginx et Lighttpd montre que ApacheBench, bien utilisé, peut révéler quelques surprises:
http://nbonvin.wordpress.com/2.....er-to-use/
Le programme ab.c (encapsulant ApacheBench pour lui permettre d’automatiser les tests sur une large échelle de clients simultanés) est expliqué en détail ici:
http://gwan.com/en_apachebench_httperf.html
Commentaire by Romain — 8 avril 2011 @ 7:19
@Jean-Marc > Merci pour les liens, c’était une très bonne lecture !
Ping by Boostez les performances PHP avec APC « wOueb by Romain DECKER / Another IT Guy Blog — 11 avril 2011 @ 13:27
[...] de l’installer, je fais un benchmark avec ApacheBench, ce qui me permettra de faire une comparaison une fois le cache activé. PHP & Apache [...]
Ping by Test de montée en charge d’un site web ou d’une API avec Blitz.io « wOueb by Romain DECKER / Another IT Guy Blog — 7 septembre 2011 @ 13:46
[...] abordé à 3 reprises les tests de montée en charge pour des sites ou des applications web :via ApacheBench, à travers des commandes en ligne depuis un serveur,avec LoadImpact, qui vous permet de tester des [...]
Ping by Test de montée en charge d’un site web ou d’une API avec Blitz.io « wOueb by Romain DECKER / Another IT Guy Blog — 7 septembre 2011 @ 13:46
[...] abordé à 3 reprises les tests de montée en charge pour des sites ou des applications web :via ApacheBench, à travers des commandes en ligne depuis un serveur,avec LoadImpact, qui vous permet de tester des [...]
Commentaire by foobar47 — 23 février 2012 @ 14:28
Hello,
Tu écris :
« Pour installer Apachebench sur Red Hat / CentOS : le programme « ab » est installé avec Apache. Pour ceux qui n’ont pas Apache installé : yum install httpd »
Juste pour être précis, comme tu l’as mentionné pour Debian/Ubuntu, sous RH/CentOS, « ab » est installé avec le package « httpd-tools » et non « httpd ».
A+
Commentaire by Fati — 18 février 2013 @ 10:16
Bonjour ;
Je souhaiterai faire un bench de Apache tomcat et Glassfish , pourriez vous me dire ou est ce que je pourrai trouver une maniere de tester la performance de glassfish afin de la comparer à celle de Apache ?
PS: mes resultats doivent se baser sur des tests que je pourrai derouler en local sur mon ordi.
En vous remerciant par avance
Cordialement