Le Blog de Richard Goutorbe, consultant informatique à Montpellier  Le Blog de Richard Goutorbe, consultant informatique à Montpellier
http://www.montpellier-informatique.com/blog

Index

.

Mesurer les performances d'un hébergement

Au moment de sélectionner un hébergement pour un nouveau site web, on est confronté à la multiplicité des offres commerciales, qui vont de la gratuité totale jusqu'au serveur dédié à plusieurs centaines d'Euros par mois.

Les limitations de ces offres ne sont pas toujours claires. Par exemple quand on lit "bande passante illimitée", ça signifie seulement que le forfait mensuel est indépendant du volume de données servi; mais cela ne nous dit pas quel volume de données maximum le serveur peut émettre effectivement. Et nous ne savons pas non plus combien d'utilisateurs pourront se connecter simultanément sur notre site avec des temps de réponse acceptables.

Alors comment choisir ?

On peut faire soi-même quelques mesures de performances pour vérifier les allégations des fournisseurs. Je propose une méthode qui permet de déterminer objectivement les caractéristiques techniques d'un hébergement:

  • le nombre maximum d'utilisateurs qui pourront se connecter simultanément sur le site
  • le temps de réponse moyen par clic
  • la bande passante effective du serveur

On aura besoin de deux outils:

  • un logiciel de benchmark ("banc d'essai" en anglais), à installer dans le PC qui servira à faire les mesures.
  • un module de test de charge à installer dans le serveur à évaluer. C'est un programme qui génère des pages html et qui fait des accès à une base de données de test.

Le logiciel de benchmark

Apache HTTP server benchmarking tool est un utilitaire qui est fourni avec le serveur Apache. Il s'appelle ab.exe sous Windows ou ab sous Linux. Si vous avez déjà installé Apache sur votre PC, alors vous avez "ab". Sinon, il ne vous reste plus qu'à installer Apache, faire une copie de "ab.exe" qui se trouve dans le sous-répertoire "bin" d'Apache, et enfin désinstaller le tout.
Pour vérifier qu'ab est bien installé sur votre PC, allez à la ligne de commande et tapez simplement "ab". Vous devez voir apparaître son mode d'emploi.

Le module de test de charge

Phperf produit des pages HTML d'une taille déterminée. Il permet d'observer comment les performances du serveur évoluent en fonction de la taille des pages. Il peut aussi faire des accès en lecture et/ou en écriture à une base de données MySql pour simuler la charge que produirait une application qui utiliserait une base. Il faut installer ce module dans le serveur à évaluer, dans n'importe quel répertoire où l'exécution de scripts PHP est permise.

Pour vérifier que phperf est bien installé dans le serveur, ouvrez-le avec votre navigateur et vous verrez s'afficher son mode d'emploi.

La méthode de mesure

On lance un premier test:

  • Durée: 60 s (option: -t 60)
  • Nombre de connexions simultanées: 30 (option -c 30)
  • Taille des pages produites: 10 Ko (option kb=10) de caractères aléatoires (option rnd=1)

avec cette commande:

 ab -t 60 -c 30 'http://user.free.fr/phperf.php5?pwd=phperf&kb=10&rnd=1'
et on obtient les résultats suivants:
        Complete requests:      917
        Failed requests:        65
        Requests per second:    15.28 [#/sec] (mean)
        Time per request:       1963.504 [ms] (mean)
        Transfer rate:          83.94 [Kbytes/sec] received
        Percentage of the requests served within a certain time (ms):
          50%    324
          66%    552
          75%   3197
          80%   3318
          90%   4524
          95%   8276
au vu de ces résultats, il est clair que ce serveur ne supporte pas 30 connexions simultanées. Avec cette charge, 7 % (65/917) des connexions échouent et le temps de réponse moyen par clic est d'environ 2 secondes, ce qui est plutôt long. De plus, la liste des pourcentage révèle que 25 % des clics ont un temps de réponse supérieur à 3 secondes, ce qui est tout à fait inacceptable.

Pour évaluer le nombre de connexions simultanées possibles avec ce serveur, on relancera le test avec des valeurs de plus en plus petites pour l'option "-c", jusqu'à ce qu'on obtienne des taux d'erreur et des temps de réponse acceptables.

On mesurera ainsi pour 10 connexions simultanées:

 ab -t 60 -c 10 'http://user.free.fr/phperf.php5?pwd=phperf&kb=10&rnd=1'

        Complete requests:      1759
        Failed requests:        2
        Requests per second:    29.32 [#/sec] (mean)
        Time per request:       341.106 [ms] (mean)
        Transfer rate:          172.78 [Kbytes/sec] received
        Percentage of the requests served within a certain time (ms)
          50%    189
          66%    211
          75%    232
          80%    246
          90%    308
          95%    612
avec seulement 10 connexions simultanées, les mesures sont tout à fait correctes: le taux d'erreur est presque nul, et le temps de réponse moyen est inférieur à une demie seconde. En outre, 95 % des clics ont un temps de réponse inférieur à 0.6 seconde, ce qui est excellent.
Le "transfer rate" mesuré est fortement dépendant de la taille des pages produites (elle est déterminée par l'option "kb"). Elle est de 10 Ko dans les deux exemples précédents, mais il importe que vous fixiez une taille plus représentative de l'application que vous comptez faire du serveur. Estimez la taille moyenne des pages que produira votre application, et utilisez-la pour l'option "kb".

L'impact d'une base de données sur les performances

Si le serveur est destiné à héberger une application qui fait appel à une base de données, alors il faut mesurer ses performances en demandant au module phperf de faire des accès sur une base de test. Reportez-vous à son mode d'emploi pour l'initialisation de cette base.

On relancera le test précédent, en ajoutant l' option dbr=10 qui provoquera, pour chaque page produite, 10 accès en lecture sur la base:

 ab -t 60 -c 10 'http://user.free.fr/phperf.php5?pwd=phperf&dbn=base&dbu=user&dbp=motdepasse&kb=10&rnd=1&dbr=10'

        Complete requests:      317
        Failed requests:        39
        Requests per second:    5.14 [#/sec] (mean)
        Time per request:       1944.484 [ms] (mean)
        Transfer rate:          46.24 [Kbytes/sec] received
        Percentage of the requests served within a certain time (ms)
          50%    552
          66%   1200
          75%   2990
          80%   3439
          90%   4867
          95%   5649
on assiste à un effondrement des performances. Avec le même nombre de connexions simultanées qu'avant, mais en accédant à la base de test, le temps de réponse moyen grimpe à environ 2 secondes tandis que le taux d'erreur bondit à plus de 10 %. Ce serveur n'est clairement pas capable de tenir la charge pour une application qui met en oeuvre une base de données.

Mesurez et comparez

En appliquant la méthode que j'ai décrite, vous pouvez mesurer les capacités de votre propre hébergement. Vous serez peut-être surpris du résultat, comme je l'ai été moi-même !

De nombreux fournisseurs proposent un mois d'essai gratuit.
Profitez de ces opportunités pour évaluer leurs offres et comparez-les à vos conditions actuelles...


Copyright (c) Richard Goutorbe 2008-2009

 
Page last modified on October 22, 2009, at 09:42 AM