Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
loadaverage [Le 28/04/2011, 13:10] – Remplacement de la suite de commandes ln par update-rc.d 109.208.26.175 | loadaverage [Le 03/12/2020, 15:41] (Version actuelle) – [Que représentent les "load average" ?] 81.80.208.70 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | |||
+ | ====== Loadaverage : La charge d'une machine sous Ubuntu... ====== | ||
+ | |||
+ | <note warning> | ||
+ | |||
+ | ===== Introduction ===== | ||
+ | |||
+ | Une question fréquente que l'on se pose lorsqu' | ||
+ | * l' | ||
+ | * mémoire vive disponible | ||
+ | * espace disque disponible | ||
+ | * mémoire swap utilisée | ||
+ | * et bien d' | ||
+ | |||
+ | Personnellement, | ||
+ | |||
+ | == L' | ||
+ | |||
+ | Le pourcentage d' | ||
+ | |||
+ | < | ||
+ | Cpu(s): | ||
+ | </ | ||
+ | |||
+ | Est-ce que cela signifie pour autant que votre serveur est chargé à 0,3% ??? | ||
+ | |||
+ | Le taux d' | ||
+ | |||
+ | Pour moi, c'est une bonne indication pour déterminer si un processus consomme du CPU de manière inattendue mais pas assez pour évaluer la charge d'une machine. | ||
+ | |||
+ | == La mémoire vive disponible == | ||
+ | |||
+ | La quantité de mémoire vive disponible peut également donner une information. Voyons un petit '' | ||
+ | |||
+ | < | ||
+ | Mem: | ||
+ | </ | ||
+ | |||
+ | Cette information est-elle significative ? Est-ce que mon serveur est chargé à 99% ? | ||
+ | |||
+ | Le noyau Linux utilise un système de libération des zones mémoires dit **paresseuse**. C' | ||
+ | |||
+ | == Espace disque utilisé == | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur | ||
+ | / | ||
+ | tmpfs | ||
+ | 192.168.254.40:/ | ||
+ | 661G 368G 259G 59% / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | == Mémoire swap utilisée == | ||
+ | |||
+ | Reprenons notre outil '' | ||
+ | |||
+ | < | ||
+ | Swap: 4104596k total, | ||
+ | </ | ||
+ | |||
+ | Encore une fois, ça ne nous donne aucune information sur la charge du serveur. Cette donnée nous indique néanmoins quelque chose d' | ||
+ | |||
+ | Pour moi, la mémoire swap utilisée m' | ||
+ | |||
+ | ===== Les "load average" | ||
+ | |||
+ | Après avoir passé en revue les quelques indicateurs de l' | ||
+ | |||
+ | Les **load average** existent depuis longtemps sur les systèmes Unix et Linux a hérité de cette notion. Vous trouverez cette information de plusieurs manières (locales ou distantes) et est généralement représentée comme 3 chiffres à 2 décimales. | ||
+ | |||
+ | < | ||
+ | load average: 0.26, 0.28, 0.35 | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | load average: 0.26, 0.28, 0.35, 0.46 | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Que représentent les "load average" | ||
+ | |||
+ | Les **load average** représentent le nombre moyen de processus dans la file d' | ||
+ | |||
+ | Donc, en clair, si vous avez un '' | ||
+ | |||
+ | FIXME: Dans le kernel linux, le load-average contient également les processus en attente d'I/O, ce n'est pas uniquement la charge processeur ( | ||
+ | http:// | ||
+ | ) | ||
+ | ==== On peut voir ça comme une usine... ==== | ||
+ | |||
+ | L' | ||
+ | La matière première est en entrée de cette usine (les processus en attente). | ||
+ | Les produits finis sont en sortie de l' | ||
+ | |||
+ | Si vous avez beaucoup de matière première en attente, c'est que l' | ||
+ | Si vous avez peu ou pas de matière première en attente, c'est que l' | ||
+ | |||
+ | En clair, si votre serveur est bien dimensionné ; vous aurez un load average relativement faible. | ||
+ | |||
+ | |||
+ | ==== En bref... ==== | ||
+ | |||
+ | Les **load average** permettent d' | ||
+ | |||
+ | Pour moi (et pour beaucoup d' | ||
+ | |||
+ | ===== Qu' | ||
+ | |||
+ | Maintenant que je vous ai vanté les mérites des load averages, vous allez vous empressez de faire un '' | ||
+ | |||
+ | La bonne valeur de load average n' | ||
+ | |||
+ | Dans mon parc, j'ai un serveur de mail qui ne dépasse jamais les '' | ||
+ | |||
+ | **En fait, tout est relatif !** | ||
+ | |||
+ | Que les tâches soient un peu plus lentes sur le serveur de centralisation des sauvegarde m' | ||
+ | |||
+ | En règle générale (d' | ||
+ | |||
+ | |||
+ | ===== Comment obtenir les load average ? ===== | ||
+ | |||
+ | Il y a deux manières essentielles pour obtenir les load averages ; soit localement sur la machine ; soit de manière distante à des fins de supervisions. | ||
+ | |||
+ | |||
+ | ==== Localement ==== | ||
+ | |||
+ | Pour obtenir les informations de load average localement ; vous pouvez utiliser les programmes suivants : | ||
+ | |||
+ | * '' | ||
+ | Pour se faire il suffit d' | ||
+ | |||
+ | --- // | ||
+ | ensuite pour unity exécuter en ligne de commande : | ||
+ | < | ||
+ | gsettings set com.canonical.Unity.Panel systray-whitelist " | ||
+ | </ | ||
+ | |||
+ | |||
+ | * '' | ||
+ | |||
+ | < | ||
+ | top - 13:19:57 up 19 days, 1:15, 1 user, load average: 0.02, 0.03, 0.00 | ||
+ | Tasks: | ||
+ | Cpu(s): | ||
+ | Mem: | ||
+ | Swap: 4104596k total, | ||
+ | |||
+ | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND | ||
+ | 32750 root 15 | ||
+ | 1 root 00 | ||
+ | 2 root RT | ||
+ | [...] | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | |||
+ | < | ||
+ | | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | < | ||
+ | 0.05 0.04 0.00 1/67 32139 | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | Sinon il est possible d' | ||
+ | < | ||
+ | sudo apt-get install indicator-multiload | ||
+ | </ | ||
+ | |||
+ | puis relancer la session (ou dans une console lancer la commande indicator-multiload &) | ||
+ | Ce programme permet de visualiser directement différents paramètres issus de l' | ||
+ | |||
+ | Pour le paramétrage cliquer droit sur l’icône et sélectionner préférences. Dans l' | ||
+ | ==== A distance ==== | ||
+ | |||
+ | Pour obtenir les load average à distance (ce qui est pratique pour la supervision ou plus simplement pour éviter de devoir ouvrir de nombreuses consoles SSH), nous allons utiliser la RPC '' | ||
+ | |||
+ | === Installation sur les serveurs à superviser === | ||
+ | <note important> | ||
+ | En effet, l' | ||
+ | Pour installer '' | ||
+ | * Activez les [[: | ||
+ | * Installer le paquet '' | ||
+ | * Créer un petit script pour qu'il démarre tout seul au démarrage du serveur ('' | ||
+ | < | ||
+ | #!/bin/sh | ||
+ | |||
+ | / | ||
+ | </ | ||
+ | * Activez ce script comme exécutable ('' | ||
+ | * Liez le script avec les niveaux de démarrage : | ||
+ | < | ||
+ | update-rc.d rstatd defaults | ||
+ | </ | ||
+ | * Lancez le démon '' | ||
+ | |||
+ | Voilà, la machine est prête à recevoir les requêtes distantes. | ||
+ | |||
+ | === Installation et usage du client === | ||
+ | Sur la machine devant interroger les serveurs : | ||
+ | * Activez les [[: | ||
+ | * Installer le paquet '' | ||
+ | |||
+ | Vous avez maintenant deux commandes supplémentaires vous permettant d' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | En introduisant uniquement '' | ||
+ | |||
+ | < | ||
+ | mail 13:31 up 43 days, 56 mins, load 0.11 0.06 0.01 | ||
+ | ns 13:31 up 43 days, 56 mins, load 0.11 0.06 0.01 | ||
+ | nodeprod1 | ||
+ | backup | ||
+ | nodeprod2 | ||
+ | nodearch2 | ||
+ | nodearch1 | ||
+ | clusterprod | ||
+ | </ | ||
+ | |||
+ | En faisant suivre '' | ||
+ | |||
+ | Concernant la commande '' | ||
+ | |||
+ | < | ||
+ | System Information for: mail | ||
+ | uptime: | ||
+ | cpu usage (jiffies): user 8937954 | ||
+ | page in: 0 page out: 0 swap in: 0 swap out: 0 | ||
+ | intr: -1 | ||
+ | disks: 0 0 0 0 | ||
+ | ethernet: | ||
+ | tx: 1583182307 | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Couplage avec Nagios ===== | ||
+ | |||
+ | * Pour la surveillance des load averages avec [[: | ||
+ | < | ||
+ | #!/bin/sh | ||
+ | |||
+ | # Usage : check_rup $HOSTNAME $WARNING $CRITICAL | ||
+ | # (remarque : les valeurs limites s' | ||
+ | # | ||
+ | # Exemple : check_rup 192.168.254.30 100 320 | ||
+ | # (warning vaut 1.00, critical vaut 3.20) | ||
+ | |||
+ | STATE_OK=0 | ||
+ | STATE_WARNING=1 | ||
+ | STATE_CRITICAL=2 | ||
+ | STATE_UNKNOWN=3 | ||
+ | |||
+ | HOSTNAME=$1 | ||
+ | WARNING=$2 | ||
+ | CRITICAL=$3 | ||
+ | |||
+ | VALUE=`rup $1 | awk ' | ||
+ | REAL_VALUE=`echo $VALUE | awk ' | ||
+ | |||
+ | if test -z $VALUE | ||
+ | then | ||
+ | echo "Error during execute of ' | ||
+ | exit $STATE_UNKNOWN | ||
+ | fi | ||
+ | |||
+ | if test $VALUE -ge $CRITICAL | ||
+ | then | ||
+ | echo "Load average 1 minute is CRITICAL ($REAL_VALUE)" | ||
+ | exit $STATE_CRITICAL | ||
+ | fi | ||
+ | |||
+ | if test $VALUE -ge $WARNING | ||
+ | then | ||
+ | echo "Load average 1 minute is WARNING ($REAL_VALUE)" | ||
+ | exit $STATE_WARNING | ||
+ | fi | ||
+ | |||
+ | echo "Load average 1 minute is OK ($REAL_VALUE)" | ||
+ | exit $STATE_OK | ||
+ | </ | ||
+ | * et ces informations comme " | ||
+ | < | ||
+ | define command{ | ||
+ | command_name | ||
+ | command_line | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | // |