Benchmark Apache 2.4.7 – Ressources statiques
En cours d’étude comparative (~qualitative) sur les différents services liés à l’hébergement de sites internet, je travaille actuellement sur la dernière version du légendaire serveur HTTP Apache.
L’objectif de ce benchmark est de comparer les performances de la version d’Apache en fonction du MPM.
Si ces dernières sont moyennes en Prefork (meilleurs résultats obtenus en 2.2.26), nous obtenons néanmoins de bons résultats en Worker et Event (et donc threaded).
Pour illustrer ces performances, ci-dessous un graphique montrant le nombre de requêtes par seconde sur une page static (html).
Histoire de titiller un peu les choses (et certains confrères), j’ai effectué les mêmes tests sur un Nginx installé via les packages Debian (1.2.1-2.2+wheezy2)
Les configurations des services sont celles livrées par défaut.
Bien entendu, il ne s’agit que de configuration par défaut, des optimisations pour chaque service restent à faire. (ex: MaxClient en prefork à 150, limite atteinte lors du test )
Le test consiste à exécuter consécutivement 50 fois Apache Bench sur chaque service:
ab -n 5000 -c 250 -k http://$URL:$PORT
Comme nous le voyons, l’utilisation d’Apache en mode « threaded » permet d’obtenir des résultats similaires, voir meilleurs qu’avec Nginx, sur des configuration par défaut.
L’objectif de mes travaux actuels ne consistant pas à confronter ces 2 outils, j’y reviendrai certainement afin de pousser l’analyse plus loin.
Configurations des services
Nginx
nginx version: nginx/1.2.1
worker_processes 4;
worker_connections 768;
Apache 2.4.7 MPM Prefork
Server version: Apache/2.4.7 (Unix)
Server built: Dec 17 2013 10:33:17
Server’s Module Magic Number: 20120211:27
Server loaded: APR 1.5.0, APR-UTIL 1.5.3
Compiled using: APR 1.5.0, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Apache 2.4.7 MPM Worker
Server version: Apache/2.4.7 (Unix)
Server built: Dec 21 2013 21:15:45
Server’s Module Magic Number: 20120211:27
Server loaded: APR 1.5.0, APR-UTIL 1.5.3
Compiled using: APR 1.5.0, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
<IfModule mpm_worker_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
Apache 2.4.7 MPM Event
Server version: Apache/2.4.7 (Unix)
Server built: Dec 21 2013 10:08:21
Server’s Module Magic Number: 20120211:27
Server loaded: APR 1.5.0, APR-UTIL 1.5.3
Compiled using: APR 1.5.0, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>