H2Load – test de montée en charge HTTP/2 et SPDY
H2Load est un outils de test de montée en charge HTTP/2 et HTTP/1.1 libre.
La particularité de H2Load est qu’il supporte le protocole HTTP/2 mais il fonctionne aussi avec le protocole HTTP/1.1 bien sûr.
Construit autour de la librairie spdylay, il support également le protocole SPDY, SSL/TLS
H2Load fait parti du paquet nghttp2. L’installation se fait très simplement sur Archlinux et j’ai cru sur Debian Jessie, c’était dispo, mais il semble que non… (Merci @PPmarcel et Benoît HERVIER) Sur la Sid, on est en version 1.11.1-1 mais bon, c’est la sid…
Voici un exemple basique d’utilisation :
h2load -n100000 -c100 -t2 https://localhost
Voici explication sur les tests possibles :
- -n -> Nombre de requêtes simultanées. Par défaut : 1
- -c -> Nombre de clients simultanées. Par défaut : 1
- -t -> Nombre de threads natifs. Par défaut : 1
Voici à quoi ressemble le résultat du benchmark :
$ h2load -n100 -c100 -m10 --h1 http://www.monsiteestlent.com starting benchmark... spawning thread #0: 10 total client(s). 10 total requests Application protocol: http/1.1 progress: 10% done progress: 20% done progress: 30% done progress: 40% done progress: 50% done progress: 60% done progress: 70% done progress: 80% done progress: 90% done progress: 100% done finished in 525.28ms, 19.04 req/s, 724.99KB/s requests: 10 total, 10 started, 10 done, 10 succeeded, 0 failed, 0 errored, 0 timeout status codes: 10 2xx, 0 3xx, 0 4xx, 0 5xx traffic: 380.82KB (389960) total, 3.27KB (3350) headers (space savings 0.00%), 376.49KB (385530) data min max mean sd +/- sd time for request: 154.55ms 479.76ms 313.66ms 102.25ms 60.00% time for connect: 33.76ms 48.58ms 41.72ms 4.55ms 70.00% time to 1st byte: 125.00ms 364.38ms 234.51ms 64.64ms 70.00% req/s : 1.91 5.01 3.08 0.98 60.00
Voici une explication sur la sortie de H2Load :
- requests
-
- total
- Nombre total de requêtes initiées par les instructions de lancement de h2load.
- started
- Nombre de requêtes lancées par h2load.
- done
- Nombre de requêtes complétées.
- succeeded
- Nombre de requêtes terminées avec succès. Seul les codes HTTP 2xx et 3xx sont considérées comme en succès.
- failed
- Nombre de requêtes ayant échouées, incluant les défaillances HTTP (ayant un code HTTP différent de celui du succès)
- errored
- Le nombre de requêtes ayant échouées, à l’exception des défaillances au niveau de HTTP. Ceci est le sous-ensemble du nombre de requêtes indiquées en tant que failed, dans la plupart des cas sur un problème réseau ou lorsque le flux a été réinitialisé via RST_STREAM (Nouveautés du protocol HTTP/2 qui permet de couper une connexion – plus d’info : https://http2.github.io/http2-spec/#RST_STREAM).
- timeout
- Nombre de requêtes ayant eu un timeout avant d’être terminées. Il s’agit d’un sous-ensemble du nombre de requêtes écouchées indiquées dans errored.
- status codes
- Répartition des requêtes par code HTTP.
- traffic
-
- total
- Nombre de bytes reçus par le serveur. Si les requêtes sont faites via TLS, il s’agit du nombre de bytes décryptés.
- headers
- Nombre de bytes de réponse du header du serveur sans décompression. L’espace sauvé montre l’efficience de la compression du header. Le
space savings
est calculé par (1 –headers
/decompressed(headers)
) * 100. Pour HTTP/1.1, c’est généralement 0,00%, étant donné qu’il n’y a pas de compression d’en-tête en HTTP/1.1. Pour HTTP/2 et SPDY, il montre quelques chiffres perspicaces. - data
- Nombre de bytes reçu depuis le serveur pour le body.
- time for request
-
- min
- Le temps minimum pris pour la requête et sa réponse.
- max
- Le temps maximum pris pour la demande et la réponse.
- mean
- Le temps moyen pris pour la requête et la réponse.
- sd
- L’écart-type du temps pris pour la requête et de réponse.
- +/- sd
- La fraction du nombre de requêtes en dessous de la plage de l’écart-type (moyenne +/- écart-type) par rapport au nombre total de requêtes réussies.
- time for connect
-
- min
- Le temps minimum pris pour se connecter au serveur.
- max
- Le temps maximum pris pour se connecter au serveur.
- mean
- Le temps moyen pris pour se connecter au serveur.
- sd
- L’écart-type du temps pris pour se connecter au serveur.
- +/- sd
- La fraction du nombre de connexions en dessous de la plage de l’écart-type (moyenne +/- écart-type) par rapport au nombre total de connexions réussies.
- time for 1st byte (of (decrypted in case of TLS) application data)
-
- min
- Le temps minimum pris pour obtenir le 1er byte du serveur.
- max
- Le temps maximum pris pour obtenir le 1er byte du serveur.
- mean
- Le temps moyen pris pour obtenir le 1er byte du serveur.
- sd
- L’écart-type du temps pris pour obtenir le 1er byte du serveur.
- +/- sd
- La fraction du nombre de requêtes en dessous de la plage de l’écart-type (moyenne +/- écart-type) par rapport au nombre total de requêtes réussies.
- req/s
-
- min
- Requêtes minimum par secondes pour tous les clients.
- max
- Requêtes maximum par secondes pour tous les clients.
- mean
- Requêtes moyennes par secondes pour tous les clients.
- sd
- L’écart-type du nombre de requêtes par seconde pour tous les clients.
- +/- sd
- La fraction du nombre de requêtes en dessous de la plage de l’écart-type (moyenne +/- écart-type) par rapport au nombre total de requêtes réussies.
Faire un bench en utilisant le protocole HTTP/1.1
Par défaut, h2load test en http/2, mais il est possible de forcer le test en utilisant l’option –h1 qui est un raccourci pour utiliser les options –npn-list=http/1.1 & –no-tls-proto=http/1.1
h2load -n100 -c100 --h1 http://www.monsiteestlent.com
Ajouter ou Changer une en-tête HTTP
-H ou –header= Par exemple –header= »accept-encoding: gzip »
Ajouter un Timeout
–connection-active-timeout=<DUREE> & –connection-inactivity-timeout=<DUREE> (Unité possible : h, m, s or ms – Par defaut, si pas d’unité précisé, ça sera les secondes)
Fréquence de contrôle
-r spécifie la fréquence de création des connexions par secondes.
–rate-period=<DUREE> (Unité possible : h, m, s or ms – Par defaut, si pas d’unité précisé, ça sera les secondes)
Timing du script
--timing-script-file
=
Vous pouvez définir une liste d’URL pour chaque connexion
Voici pour la présentation de ce nouvel outil plein de promesse ;)
Quelques liens utiles :
Howto h2load
Introduction à h2load en Français
Man h2load