Récupération du « Load average » avec JMeter

Introduction

Je ne ferais pas ici une présentation complète de JMeter et JMeter Plugins, qui permet entre autres de récupérer les métriques serveurs pendant l’exécution des tests comme la charge CPU, la mémoire utilisée… Mais ce plugin ne permet pas de récupérer une métrique plus intéressante que la charge du CPU du serveur, le « Load average ».

C’est la récupération de cette métrique qui nous intéressera dans cet article.

Le « Load Average »

Le « load average » désigne, sous les systèmes UNIX, une moyenne de la charge système sur une certaine période. C’est donc une mesure de la quantité de travail que fait le système durant la période considérée. Conventionnellement les périodes utilisées sont 1, 5 et 15 minutes. Cette mesure est disponible via la commande « top » ou « uptime », ou encore via le fichier système « /proc/loadavg ».

$ uptime
14:34:03 up 10:43, 4 users, load average: 0.06, 0.11, 0.09

Un ordinateur inactif a une valeur de charge de zéro, ainsi chaque processus utilisant ou attendant d’utiliser le processeur incrémente cette valeur de 1. La plupart des systèmes UNIX compte seulement les processus en attente ou en cours d’exécution.

Lors de l’interprétation du « load average » il faut garder à l’esprit que le nombre de processeurs de la machine modifie grandement le résultat. Le nombre maximum de processus réellement en cours d'exécution dépend du nombre de processeurs : 1 pour un monoprocesseur, 2 pour un biprocesseur…

Par exemple : Une charge de 2 indique qu'il y a forcément un processus en attente sur un monoprocesseur, mais peut être simplement deux processus en cours d'exécution sur un biprocesseur.

Le « load average » est plus intéressant que l’utilisation du CPU, comme métrique pour évaluer le travail effectué par un serveur, car l’utilisation du CPU est au maximum de 100% et ne reflète pas exactement la charge de travail que doit effectuer un serveur. Alors qu’au contraire le « load average » représente directement cette charge de travail. Par exemple deux serveurs en monoprocesseur ayant un « load average » respectivement de 2 et 8 auront très probablement une utilisation du CPU de 100%, alors que l’un doit effectuer 4 fois plus de travail que l’autre.

« Load average » avec JMeter

Maintenant que nous savons que le « load average » est une métrique plus précise que la charge classique du CPU, nativement mis à disposition dans JMeter grâce au plugin « JMeterPlugins », nous allons donc mettre en place un test simple qui va récupérer le « load average » d’un serveur sous linux.

Pré-requis

Tout d’abord, avant de se lancer dans la configuration du plan de test JMeter et la récupération de la métrique à proprement parler, nous devons installer JMeter et le plugin « JMeterPlugins », ainsi que mettre en place un agent sur le serveur. Sans cet agent il est impossible de récupérer la moindre métrique provenant du serveur à tester, même si ce dernier est votre machine locale, il faudra lancer l’agent sur votre machine.

Pour ce qui est de l’installation de l’agent sur le serveur, il existe un dossier dans le plugin qui se nomme « serverAgent ». Ce dossier contient notre agent, il suffit de copier ce dossier sur le serveur à tester et de le lancer via le fichier « startAgent.sh ». Cet agent est en fait un programme Java qui va mettre à disposition les métriques principales du serveur à disposition sur un port, ce port est par défaut le 4444, il est possible de changer ce port si ce dernier est bloqué ou déjà utilisé.

Mise en place de « JMeter »

Nous allons à présent mettre en place la récupération de notre métrique via JMeter. Pour ne pas mettre en place un scénario de test, qui n’est pas l’objectif de cet article, nous utiliserons le composant « Dummy Sampler » de JMeterPlugins. Ce composant va simuler la réception d’une requête HTTP valide, ce qui va nous permettre d’interroger pendant un certain temps notre agent sur le serveur pour récupérer la métrique. Et ainsi visualiser l’évolution du « load average » sur le serveur de test.

Passons donc directement à la configuration de la récupération de la métrique. Pour cela nous allons utiliser le récepteur « PerfMon Metrics Collector » mis à disposition par le JMeter Plugins.

Il n’y a pas beaucoup de configuration dans le composant, outre le nom et le commentaire comme tous les autres composants, nous avons à disposition un tableau qui récapitule toutes les métriques récupérées par le composant sur les différents serveurs possibles, via les agents.

Remarque : Nous avons aussi la possibilité de préciser un fichier dans lequel seront exportées les informations récupérées par le récepteur.

Dans le tableau la colonne « Metric to collect » spécifie la métrique récupérée, nous allons sélectionner la métrique « EXEC » qui permet d’exécuter des commandes sur le serveur. C’est cette méthode que nous allons utiliser pour récupérer notre métrique. Pour cela nous allons faire appel à la commande « uptime », vue précédemment. Le résultat doit être formaté en un simple nombre, c’est pour cela que nous allons exécuter la commande « uptime | cut –c46-49 » pour ne récupérer que la métrique « load average » sur 1 minute.

Attention : La commande « uptime » n’est pas formatée de la même manière sur tous les OS Unix.

Nous obtenons la configuration suivante :

JMeter-load_average-param

NB : Il faut noter que dans les paramètres de la ligne EXEC nous faisons appel à un fichier, ici « /tmp/binshfile », sans ce fichier l’agent est incapable d’exécuter la commande. Attention tout de même à mettre les droits d’exécution sur le fichier.

Exécution de JMeter

Une fois JMeter en place et l’agent lancé sur le serveur, nous pouvons lancer le test. Pour montrer l’intérêt de la métrique « load average » nous allons aussi récupérer la charge CPU du serveur, pour comparer. Ce qui donne le paramétrage final suivant :

JMeter-load_average-param_final

Une fois le test lancé, j’ai légèrement stressé le serveur en lançant une application assez lourde. On obtient le graphique suivant :

JMeter-load_average-resultat

En bleu la courbe représentant la charge du CPU et en rouge le « load average » (x10) du serveur. On voit très bien le moment ou le logiciel a été lancé et quand il a été fermé. Alors que la métrique « load average » augmente progressivement. L’augmentation est progressive car le « load average » est une moyenne, ici la moyenne est faite sur 1 minute. La diminution du « load average » se fait elle aussi progressivement.

Un commentaire

Laisser un commentaire

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

Captcha *