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

 

Vus : 863
Publié par monsiteestlent : 12