Aller au contenu principal
~/GiwiSoft
BenchmarkBanner NEW BW

Apachebench, benchmarker un serveur rapidement

Giwi 3 min de lecture DevOps

Vous voulez benchmarquer un serveur de manière rapide et simple? Bon ok, c’est pas du vrai test en charge comme ce que l’on pourrait faire avec JMetter, mais ça permet d’avoir une idée des perfs et de pouvoir comparer des évolutions.

sudo apt install apache2-utils

Puis :

ab -n 30000 -c 30 http://localhost:8080/
-n : le nombre de requêtes
-c : le nombre de requêtes en parallèle
Et hop un résultat :

This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
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 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:
Server Hostname: localhost
Server Port: 8080

Document Path: /#/immo
Document Length: 9 bytes

Concurrency Level: 30
Time taken for tests: 18.746 seconds
Complete requests: 30000
Failed requests: 0
Non-2xx responses: 30000
Total transferred: 1620000 bytes
HTML transferred: 270000 bytes
Requests per second: 1600.34 [#/sec] (mean)
Time per request: 18.746 [ms] (mean)
Time per request: 0.625 [ms] (mean, across all concurrent requests)
Transfer rate: 84.39 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.9 0 23
Processing: 1 18 13.3 14 173
Waiting: 0 18 13.3 14 173
Total: 2 19 13.3 15 174

Percentage of the requests served within a certain time (ms)
50% 15
66% 20
75% 23
80% 26
90% 35
95% 45
98% 55
99% 62
100% 174 (longest request)

Interpréter les résultats

Les métriques clés à regarder :

Métrique Ce que ça signifie
Requests per second Débit : plus c’est haut, mieux c’est
Time per request (mean) Latence moyenne par requête
Failed requests Idéalement 0. Si > 0, le serveur saturait
Percentage served Regardez 90%, 95% et 99% : des écarts importants = latence irrégulière

Options avancées

# Keep-Alive (connexions persistantes)
ab -n 30000 -c 30 -k http://localhost:8080/

# Header personnalisé (ex: Accept-JSON)
ab -n 1000 -c 10 -H "Accept: application/json" http://localhost:8080/api

# Simulation d'authentification Basic
ab -n 1000 -c 10 -H "Authorization: Basic $(echo -n user:pass | base64)" http://localhost:8080/

# Cookie session
ab -n 1000 -c 10 -C "sessionid=abc123" http://localhost:8080/

Alternatives modernes

ab est obsolète pour des benchmarks sérieux. Voici mieux :

Outil Langage Atout principal
wrk C Ultraléger, scripting Lua, très haut débit
hey Go Simple, remplacement direct de ab
bombardier Go Support HTTP/2, configurable
k6 Go + JS Tests de charge complets, scénarios complexes
# hey : même simplicité que ab
hey -n 30000 -c 30 http://localhost:8080/

# bombardier : support HTTP/2
bombardier -n 30000 -c 30 http://localhost:8080/

# k6 : script JS complet
echo "import http from 'k6/http';
export default function() {
http.get('http://localhost:8080/');
}" | k6 run --vus 30 --duration 30s -

Conclusion : ab reste pratique pour un test rapide, mais passez sur hey ou k6 dès que le benchmark devient récurrent.