Benchmark Web

Quand on met en place une application, et notamment un site web, on finit souvent par vouloir connaître sa capacité à recevoir un flux important de visites.

Voici quelques softs simples qui permettent de tester la montée en charge de son infra

[notice]

Attention, un benchmark utilise d’importantes ressources, tant sur le serveur cible du benchmark, que sur la machine depuis laquelle le benchmark est lancé.

Il faut donc s’assurer de :

  • La progressivité des tests de charge
  • Le site testé doit pouvoir souffrir d’un ralentissement temporaire (pre-production)
  • De ressources suffisantes (réseau, RAM et CPU) de la machine cliente.

[/notice]

AB Apache Benchmark

Le logiciel apache benchmark est installé par défaut avec Apache sur les serveurs Web.

Il est aussi disponible sur Mac OS, Windows.

« ab » s’utilise en ligne de commande.

Les options permettent notamment de définir :

  • -n = nombre de requêtes
  • -c = nombre de connexions simultanées
  • -k = connexion persistante
  • -t = la durée du test
  • -v = donne des détails au fur et à mesure, notamment les headers.

Les paramètres recommandés :

ab -kc 20 -t 30 http://blog.blml.fr/

ou

ab -kc 20 -n 5000 http://blog.blml.fr/

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking blog.blml.fr (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests

Server Software:        nginx
Server Hostname:        blog.blml.fr
Server Port:            80

Document Path:          /
Document Length:        30749 bytes

Concurrency Level:      20
Time taken for tests:   7.987 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    5000
Total transferred:      155244989 bytes
HTML transferred:       153745000 bytes
Requests per second:    626.05 [#/sec] (mean)
Time per request:       31.946 [ms] (mean)
Time per request:       1.597 [ms] (mean, across all concurrent requests)
Transfer rate:          18982.78 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:     4   31  73.5      9     902
Waiting:        2    5  27.3      2     474
Total:          4   31  73.5      9     904
Percentage of the requests served within a certain time (ms)
50%      9
66%     11
75%     13
80%     16
90%     49
95%    216
98%    260
99%    307
100%    904 (longest request)

Avec 99% de mes requêtes traitées en moins d’un tiers de seconde, je peux être satisfait.

HTTPERF

Httperf est un outil développé par HP. Il permet globalement de faire les mêmes tests qu’un AB.

Les paramlètres principaux :

  • –server = hôte à tester
  • –num-conns = nombre de requêtes
  • –rate = nombre de connexion simultanées

httperf –server=blog.blml.fr –rate=20 –num-conns=5000

httperf –client=0/1 –server=blog.blml.fr –port=80 –uri=/ –rate=20 –send-buffer=4096 –recv-buffer=16384 –num-conns=5000 –num-calls=1
Maximum connect burst length: 1
Total: connections 5000 requests 5000 replies 5000 test-duration 249.960 s
Connection rate: 20.0 conn/s (50.0 ms/conn, <=3 concurrent connections)
Connection time [ms]: min 8.0 avg 11.4 max 3006.6 median 9.5 stddev 43.0
Connection time [ms]: connect 2.6
Connection length [replies/conn]: 1.000
Request rate: 20.0 req/s (50.0 ms/req)
Request size [B]: 65.0

Reply rate [replies/s]: min 19.8 avg 20.0 max 20.2 stddev 0.1 (49 samples)
Reply time [ms]: response 2.8 transfer 6.0
Reply size [B]: header 301.0 content 30748.0 footer 0.0 (total 31049.0)
Reply status: 1xx=0 2xx=5000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 95.05 system 131.62 (user 38.0% system 52.7% total 90.7%)
Net I/O: 607.8 KB/s (5.0*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

Apache Jmeter

Présentation

Jmeter est sans doute l’outil le plus complet pour tester un site. Il permet de faire des tests très évolués, correspondant à la réalité du surf sur un site web. Pour être au plus proche de la réalité, il faut définir des plans de tests avec les développeurs. Il est possible de s’authentifier sur une page, de surfer à travers des catégories…

 Installation et configuration

D’abord il faut installer jmeter. Il s’agit d’une application Java, donc multiplateforme, que l’on peut télécharger à l’URL http://jmeter.apache.org/download_jmeter.cgi.

La dernière version disponible est la 2.8.

Que ce soit sous Windows ou Linux, il faudra se déplacer dans l’arborescence et lancer l’exécutable (.bat ou .sh) :

  • cd C:\Users\toto\Documents\Logiciels\apache-jmeter-2.8\apache-jmeter-2.8\bin
  • jmeter.bat

Un GUI se lance :

jmeter-Apache
jmeter-Apache

On commence par ajouter des groupes d’unités (thread groups) au « plan de test » :

Clic droit sur plan de test -> Ajouter -> Moteurs d’utilisateurs Groupe d’unités

jmeter-GU
jmeter-Groupes d’unités

Les valeurs à changer se trouvent dans les propriétés de ce groupe d’unités :

  • Nombre d’utilisateurs
  • Durée de la montée en charge
  • Nombre d’itérations

Cela nous permet donc de définir un nombre d’internautes qui vont se connecter au site, avec une durée étalée en fonction de la durée de montée en charge, et répétant plusieurs fois des requêtes sur le site.

Plusieurs scenarii sont évidemment possibles. Ici on teste :

  • 20 utilisateurs
  • qui se connecteront immédiatement (0 secondes)
  • Et feront des requêtes autant que possible (infini)
  • A la date et heure fixée
  • Durant 30 secondes
jmeter-nb
jmeter-nombre d’utilisateurs

On rajoute ensuite nos requêtes. On va rajouter une requête standard :

Clic droit sur le groupe d’unités -> Configurations -> Paramètres http par défaut

jmeter HTTP param
jmeter paramètres HTTP

C’est ici qu’on va indiquer le domaine et le port que l’on veut tester.

Ensuite on indique précisément les 2 URLs que l’on veut tester :

Clic droit sur les groupes d’unités -> Ajouter -> Echantillons -> Requête http

Jmeter Requête HTTP
Jmeter Requête HTTP

Et on indique les paramètres « Nom », « port » et « chemin » :

Jmeter URL
Jmeter URL

Il nous reste à ajouter des « récepteurs », qui enregistrent les données et vont nous permettre de consulter des rapports. On va rajouter un rapport agrégé, un tableau, un graphique et un arbre des résultats :

Clic droit sur les groupes d’unités -> Ajouter -> Récepteurs -> Rapport agrégé

Clic droit sur les groupes d’unités -> Ajouter -> Récepteurs -> Graphiques de résultats

Clic droit sur les groupes d’unités -> Ajouter -> Récepteurs -> Rapport agrégé

Clic droit sur les groupes d’unités -> Ajouter -> Récepteurs -> Arbre des résultats

Clic droit sur les groupes d’unités -> Ajouter -> Récepteurs -> Tableau des résultats

Jmeter arbre des résultats
Jmeter ajout de rapports

Ce qui doit donner un menu latéral qui ressemble à ça :

Jmeter resultst
Jmeter resultats

Avant le lancement du test, il est demandé de sauvegarder le plan de tests.

Donnez-lui un nom identifiable. Il s’enregistre au format .jmx et peut être réutilisé depuis un autre jmeter.

Il ne reste plus qu’à lancer le test : menu -> lancer ou flèche verte

Avec le programmateur, il est possible de définir une heure différée de début de test.

Résultats et analyse

L’arbre des résultats montre tous les paramètres des requêtes, les requêtes elles-mêmes et les réponses.

Le tableau de résultats montre :

  • les titres des requêtes
  • le temps de réponse
  • le code retour
  • la taille des requêtes
  • la latence

Jmeter Arbre des résultats

Le rapport agrégé montre sous forme de tableau :

  • Le nombre total de requêtes émises durant le test
  • Le taux d’erreur
  • Le nombre de requêtes / seconde
  • Le débit en ko/s
Jmeter Rapport agrégé
Jmeter Rapport agrégé

Le graphique des résultats indique :

  • le temps de réponse moyen
  • le débit de façon graphique.
Jmeter Rapport graphique
Jmeter Rapport graphique

En théorie, ces valeurs doivent se stabiliser au bout d’un certain temps comme indiqué sur l’image.

Autres Outils

Ezab

To Do : tester ezab, script php, qui peut se lancer en interface web équivalent à la commande « ab ».

Loadimpact.com

Le site loadimpact.com propose des tests similaires gratuitement.

Il faut créer un compte pour gérer certains paramètres. Les résultats sont assez agréables à lire, mais moins détaillés.

loadimpact utilisateurs
loadimpact utilisateurs
loadimpact fichiers
loadimpact fichiers

Blitz.io

Le site blitz.io propose aussi des tests gratuitement avec de beaux graphiques.

Il faut créer un compte sur leur site. Les comptes gratuits disposent de 10 crédits (= 10 tests).

Voici les paramètres que j’ai utilisés

  • timeout : indique la durée à partir de laquelle une requête est abandonnées
  • region : origine des tests
  • pattern :

–timeout 5000 –region ireland –pattern 1-250:60 http://blog.blml.fr/index.php

Benchmark avec Blitz.io
Benchmark avec Blitz.io

 

 

whichloadsfaster.com

Ce site permet de comparer visuellement le chargement de deux sites.

Ici on compare le chargement de mon blog avec un moteur de recherche :

Benchmark Blog versus Bing
Benchmark avec Which Load Faster

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload the CAPTCHA.