introduction
La quantité de mémoire, la taille du cache, la vitesse de lecture et d’écriture sur le disque, ainsi que la rapidité et la disponibilité de la puissance de traitement sont tous des éléments clés qui affectent les performances de votre infrastructure. Dans cet article, nous allons nous intéresser aux concepts de base de la surveillance de l’UC et aux stratégies d’alerte. Nous allons décrire comment utiliser deux utilitaires Linux communs, + uptime +
et '+ top + `, pour en savoir plus sur la charge et l’utilisation de votre CPU, et comment définir les règles d’alerte de DigitalOcean pour vous avertir des modifications importantes apportées au CPU de Droplet.
Conditions préalables
Les deux utilitaires dont nous discutons, + uptime +
et '+ top + `sont disponibles dans le cadre de l’installation par défaut de la plupart des distributions Linux. Pour tirer parti des fonctionnalités de DigitalOcean telles que les stratégies d’alerte, vous aurez besoin d’un droplet DigitalOcean avec la surveillance activée.
Le guide Comment installer et utiliser l’agent DigitalOcean pour la surveillance explique comment activer la surveillance sur un nouveau droplet et comment ajouter l’agent de surveillance à un droplet déjà en cours d’exécution.
Contexte
Avant d’approfondir les détails de la surveillance + uptime +
, + top +
et DigitalOcean, nous examinerons comment l’utilisation du processeur est mesurée et quels types de modèles sont souhaitables.
Charge de la CPU par rapport à Utilisation du processeur
La charge et l’utilisation de la CPU sont deux manières différentes de considérer l’utilisation de la puissance de traitement d’un ordinateur.
Pour conceptualiser la principale différence entre les deux, nous pouvons imaginer les processeurs en tant que caissiers dans une épicerie et les tâches en tant que clients. * La charge du processeur * revient à avoir une seule ligne de paiement où les clients attendent que le prochain caissier soit disponible. La charge est essentiellement un nombre de personnes en ligne, y compris celles qui se trouvent aux caisses enregistreuses. Plus la ligne est longue, plus l’attente est longue. En revanche, * l’utilisation du processeur * ne concerne que le niveau d’activité des caissiers et n’a aucune idée du nombre de clients en attente.
Plus spécifiquement, les tâches sont mises en file d’attente pour utiliser les processeurs du serveur. Lorsqu’on arrive en haut de la file d’attente, il est programmé pour recevoir un certain temps de traitement. Si elle se termine, alors elle se termine; sinon, il retourne à la fin de la file d’attente. Dans les deux cas, la tâche suivante en ligne a son tour.
-
La charge du processeur * est la longueur de la file d’attente des tâches planifiées, y compris celles en cours de traitement. Les tâches peuvent basculer en quelques millisecondes. Par conséquent, un seul instantané de la charge n’est pas aussi utile que la moyenne de plusieurs lectures effectuées sur une période donnée. Par conséquent, la valeur de la charge est souvent indiquée sous la forme * charge moyenne *.
La charge du processeur indique la demande en temps de calcul. Une forte demande peut entraîner des conflits de temps processeur et une dégradation des performances.
-
L’utilisation du processeur *, en revanche, nous indique le niveau d’activité des processeurs, sans aucune connaissance du nombre de processus en attente. Le suivi de l’utilisation peut montrer les tendances au fil du temps, mettre en évidence les pointes et aider à identifier les activités non désirées,
Valeurs non normalisées vs normalisées
Sur un système à processeur unique, la capacité totale est toujours de 1. Sur un système multiprocesseur, les données peuvent être affichées de deux manières différentes. La capacité combinée de tous les processeurs est comptée à 100% quel que soit le nombre de processeurs, elle est appelée * normalisée. * L’autre option consiste à compter chaque processeur en tant qu’unité, de sorte qu’un système à 2 processeurs pleinement utilisé est à 200% de la capacité, un système à 4 processeurs pleinement utilisé est à 400% de la capacité, et ainsi de suite.
Afin d’interpréter correctement les chiffres de charge ou d’utilisation du processeur, nous devons connaître le nombre de processeurs dont dispose le serveur.
Affichage des informations sur la CPU
Nous pouvons utiliser la commande + nproc +
avec l’option + - all +
pour afficher le nombre de processeurs. Sans l’indicateur + - all +
, il affichera le nombre d’unités de traitement disponibles pour le processus en cours, qui sera inférieur au nombre total de processeurs utilisés, le cas échéant.
nproc --all
Output of nproc2
Sur la plupart des distributions Linux modernes, nous pouvons également utiliser la commande + lscpu +
, qui affiche non seulement le nombre de processeurs, mais également l’architecture, le nom du modèle, la vitesse, etc.
lscpu
Output of lscpuArchitecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Model name: Intel(R) Xeon(R) CPU E5-2650L v3 @ 1.80GHz
Stepping: 2
CPU MHz: 1797.917
BogoMIPS: 3595.83
Virtualization: VT-x
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 30720K
NUMA node0 CPU(s): 0,1
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm vnmi ept fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat
Connaître le nombre de processeurs est important pour comprendre la signification réelle de la sortie de différents outils liée à la CPU.
Quelles sont les valeurs optimales pour la charge et l’utilisation?
L’utilisation optimale du processeur varie en fonction du type de travail attendu du serveur. Une utilisation élevée et soutenue du processeur se traduit par une interactivité moins réactive avec le système. Il est souvent approprié que les applications nécessitant des calculs intensifs et les travaux par lots s’exécutent systématiquement à pleine capacité ou presque. Toutefois, si le système est censé servir des pages Web ou fournir des sessions interactives réactives pour des services tels que SSH, il peut être souhaitable de disposer d’une puissance de traitement inactive.
À l’instar de nombreux aspects de la performance, il est essentiel de connaître les besoins spécifiques des services du système et de surveiller les modifications imprévues pour optimiser les ressources.
Surveiller le CPU
Une multitude d’outils peuvent fournir des informations sur l’état du processeur d’un système. Nous allons examiner deux commandes, + uptime +
et + top +
. Les deux font partie de l’installation par défaut des distributions Linux les plus courantes et sont couramment utilisés à la demande pour étudier la charge et l’utilisation du processeur. Dans les exemples suivants, nous examinerons la Droplet à 2 cœurs que nous avons profilée ci-dessus.
la disponibilité
Nous allons commencer par la commande + uptime +
pour examiner la charge du processeur qui, tout en affichant uniquement la moyenne de charge de base du processeur, peut être utile lorsqu’un système répond lentement aux requêtes interactives car il nécessite peu de ressources système.
spectacles de disponibilité:
-
l’heure système au moment de l’exécution de la commande
-
depuis combien de temps le serveur fonctionne
-
combien de connexions les utilisateurs ont eu à la machine
-
la charge moyenne du processeur pour les cinq dernières minutes, les quinze dernières minutes.
uptime
Output 14:08:15 up 22:54, 2 users, load average: 2.00, 1.37, 0.63
Dans cet exemple, la commande a été exécutée à 14h08 sur un serveur en veille depuis près de 23 heures. Deux utilisateurs étaient connectés lors de l’exécution de + uptime +
. Étant donné que ce serveur dispose de 2 processeurs, pendant la minute précédant l’exécution de la commande, la charge moyenne de 2,00 signifie que pendant cette minute, en moyenne, deux processus utilisaient les processeurs et aucun processus n’était en attente. La moyenne de charge sur 5 minutes indique que, pendant une partie de cet intervalle, un processeur inactif était utilisé environ 60% du temps. La valeur sur 15 minutes indique qu’il y avait encore plus de temps de traitement disponible. Les trois chiffres ensemble montrent une augmentation de la charge au cours des quinze dernières minutes.
Uptime fournit un aperçu utile de la charge moyenne, mais pour obtenir des informations plus détaillées, nous allons passer au sommet.
top
Comme + uptime +
, top est disponible sur les systèmes Linux et Unix, mais en plus d’afficher les moyennes de charge pour des intervalles d’historique prédéfinis, il fournit des informations périodiques sur l’utilisation de l’UC ainsi que d’autres mesures de performances pertinentes. Alors que + uptime +
s’exécute et se termine, top reste au premier plan et est actualisé à intervalles réguliers.
top
-
Le bloc d’en-tête * + Les cinq premières lignes fournissent des informations récapitulatives sur les processus du serveur:
Outputtop - 18:31:30 up 1 day, 3:17, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 114 total, 1 running, 113 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.7 us, 0.0 sy, 0.0 ni, 92.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.1 st
KiB Mem : 4046532 total, 3238884 free, 73020 used, 734628 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 3694712 avail Mem
-
La première ligne est presque identique à la sortie de
+ uptime +
. Comme+ durée de fonctionnement +
, les moyennes de charge sur une, cinq et quinze minutes sont affichées. La seule différence entre cette ligne et la sortie de+ uptime +
est que le début de la ligne indique le nom de la commande,+ top +
, et que le temps est mis à jour à chaque fois que+ top +
rafraîchit les données. -
La deuxième ligne fournit un résumé de l’état des tâches: le nombre total de processus, suivis par le nombre de processus en cours d’exécution, en veille, arrêtés ou zombies.
-
La troisième ligne nous parle de l’utilisation du processeur. Ces chiffres sont normalisés et affichés sous forme de pourcentages (sans le symbole%), de sorte que toutes les valeurs de cette ligne doivent totaliser 100% quel que soit le nombre de CPU.
-
Les quatrième et cinquième lignes des informations d’en-tête nous renseignent sur l’utilisation de la mémoire et de l’échange, respectivement.
Enfin, le bloc d’en-tête est suivi d’un tableau contenant des informations sur chaque processus, que nous examinerons dans un instant.
Dans l’exemple de bloc d’en-tête ci-dessous, la moyenne de charge sur une minute dépasse le nombre de processeurs de 0,77, indiquant une file d’attente courte avec un peu de temps d’attente. La capacité totale du processeur est utilisée à 100% et la mémoire est abondante.
Output
Tasks: 117 total, 3 running, 114 sleeping, 0 stopped, 0 zombie
KiB Mem : 4046532 total, 3244112 free, 72372 used, 730048 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 3695452 avail Mem
. . .
Examinons plus en détail chacun des champs de la ligne de l’UC:
-
* nous, utilisateur: temps d’exécution des processus utilisateur in-niced *
Cette catégorie fait référence aux processus utilisateur qui ont été démarrés sans priorité de planification explicite. + Plus précisément, les systèmes Linux https://www.digitalocean.com/community/tutorials/how-to-use-ps-kill-and-nice-to-manage-processes-in-linux#how-to-adjust- priorités de processus [utilisez la commande+ nice +
pour définir la priorité de planification d’un processus], ainsi «non ordonné» signifie que+ nice +
n’a pas été utilisé pour modifier la valeur par défaut. Les valeurs * user * et * nice * représentent tous les processus utilisateur. Une utilisation élevée de la CPU dans cette catégorie peut indiquer un processus d’emballement. Vous pouvez utiliser la sortie de la table des processus pour déterminer si c’est le cas. -
* sy, system: heure d’exécution des processus du noyau *
La plupart des applications ont à la fois des composants utilisateur et du noyau. Lorsque le noyau Linux effectue des opérations telles que passer des appels système, vérifier les autorisations ou interagir avec des périphériques pour le compte d’une application, l’utilisation du processeur par le noyau s’affiche ici. Lorsqu’un processus effectue son propre travail, il apparaîtra dans la figure * utilisateur * décrite ci-dessus ou, si sa priorité a été explicitement définie à l’aide de la commande+ nice +
, dans la figure * nice * qui suit. -
* ni, nice: temps d’exécution de processus utilisateur niced *
Comme * utilisateur *, cela fait référence aux tâches de processus n’impliquant pas le noyau. Contrairement à * utilisateur, * la priorité de planification pour ces tâches a été définie explicitement. Le niveau de gentillesse d’un processus est indiqué dans la quatrième colonne du tableau des processus sous l’en-tête * NI *. Les processus avec une valeur de gentillesse comprise entre 1 et 20 qui consomment beaucoup de temps de calcul ne posent généralement pas de problème, car les tâches dont la priorité est normale ou supérieure seront en mesure d’obtenir une puissance de calcul quand elles en auront besoin. Toutefois, si des tâches avec une gentillesse élevée, comprises entre -1 et -20, prennent une quantité de CPU disproportionnée, elles peuvent facilement affecter la réactivité du système et justifier des investigations supplémentaires. Notez que de nombreux processus exécutés avec la priorité de planification la plus élevée, -19 ou -20 en fonction du système, sont générés par le noyau pour effectuer des tâches importantes qui affectent la stabilité du système. Si vous n’êtes pas sûr des processus que vous voyez, il est prudent d’enquêter sur eux plutôt que de les tuer. -
* id, idle: temps passé dans le gestionnaire d’inactivité du noyau *
Ce chiffre indique le pourcentage de temps pendant lequel la CPU était à la fois disponible et inactive. Un système est généralement en bon état de fonctionnement par rapport à la CPU lorsque les chiffres * utilisateur *, * gentil * et * inactif * combinés sont proches de 100%. -
* wa, IO-wait: temps d’attente pour l’achèvement des E / S *
Le chiffre IO-wait indique que le processeur a commencé une activité de lecture ou d’écriture et attend la fin de l’opération d’E / S. Les tâches de lecture / écriture pour les ressources distantes telles que NFS et LDAP seront également prises en compte dans IO-wait. Tout comme le temps d’inactivité, les pics sont normaux, mais tout type de temps fréquent ou prolongé dans cet état suggère une tâche inefficace, un périphérique lent ou un problème potentiel de disque dur. -
* salut: temps passé à réparer les interruptions matérielles *
Il s’agit du temps passé sur les interruptions physiques envoyées à la CPU par des périphériques tels que des disques et des interfaces réseau matérielles. Lorsque la valeur * d’interruption matérielle * est élevée, l’un des périphériques peut ne pas fonctionner correctement. -
* si: temps passé à traiter les interruptions logicielles *
Les interruptions logicielles sont envoyées par des processus plutôt que par des périphériques physiques. Contrairement aux interruptions matérielles qui se produisent au niveau du processeur, les interruptions logicielles se produisent au niveau du noyau. Lorsque la valeur * interruption logicielle * utilise beaucoup de puissance de traitement, étudiez les processus spécifiques qui utilisent le processeur. -
* st: le temps volé de cette machine virtuelle par l’hyperviseur *
La valeur «voler» fait référence à la durée pendant laquelle un processeur virtuel attend son traitement par un processeur physique pendant que l’hyperviseur se dépare lui-même ou un autre processeur virtuel. Essentiellement, la quantité d’utilisation du processeur dans ce champ indique la quantité de puissance de traitement que votre machine virtuelle est prête à utiliser, mais non disponible pour votre application car elle est utilisée par l’hôte physique ou une autre machine virtuelle. En règle générale, une valeur de vol pouvant atteindre 10% sur de brèves périodes n’est pas préoccupante. De plus grandes quantités de vols pendant de longues périodes peuvent indiquer que le serveur physique a plus de demandes de CPU qu’il ne peut en supporter.
Maintenant que nous avons examiné le résumé de l’utilisation du processeur fourni dans le bloc d’en-tête + top +
, nous allons examiner le tableau de processus qui apparaît en dessous, en prêtant attention aux colonnes spécifiques au processeur.
-
La table de processus * + Tous les processus en cours d’exécution sur le serveur, quel que soit leur état, sont répertoriés sous le bloc récapitulatif. L’exemple ci-dessous inclut les six premières lignes de la table de processus de la commande
+ top
de la section ci-dessus. Par défaut, la table de processus est triée en fonction du% CPU. Nous voyons donc en premier les processus qui consomment le plus de ressources processeur.
Output
PID USER PR NI VIRT RES SHR S %MEM TIME+ COMMAND
9966 sammy 20 0 9528 96 0 R 0.0 0:40.53 stress
9967 sammy 20 0 9528 96 0 R 0.0 0:40.38 stress
7 root 20 0 0 0 0 S 0.0 0:01.86 rcu_sched
1431 root 10 -10 7772 4556 2448 S 0.1 0:22.45 iscsid
9968 root 20 0 42556 3604 3012 R 0.1 0:00.08 top
9977 root 20 0 96080 6556 5668 S 0.2 0:00.01 sshd
...
Le pourcentage de CPU est présenté sous forme de valeur en pourcentage, mais il n’est pas normalisé. Par conséquent, sur ce système à deux cœurs, le total de toutes les valeurs de la table de processus devrait s’ajouter à 200% lorsque les deux processeurs sont pleinement utilisés.
Jusqu’à présent, nous avons examiné deux commandes Linux couramment utilisées pour examiner la charge et l’utilisation du processeur. Dans la section suivante, nous examinerons les outils de surveillance du processeur disponibles sans frais supplémentaires pour les gouttelettes DigitalOcean.
Surveillance DigitalOcean pour l’utilisation du processeur
Par défaut, toutes les gouttelettes affichent des graphiques de bande passante, de processeur et d’E / S de disque lorsque vous cliquez sur le nom de la gouttelette dans le panneau de configuration:
image: https: //assets.digitalocean.com/articles/monitor-cpu/droplet-control.png [Capture d’écran d’un nom de gouttelette dans le panneau de configuration]
Ces graphiques permettent de visualiser l’utilisation de chaque ressource au cours des 6 dernières heures, 24 heures, 7 jours et 24 heures. Le graphique du processeur fournit des informations sur l’utilisation du processeur. La ligne bleu foncé indique l’utilisation de la CPU par les processus utilisateur. Le bleu clair indique l’utilisation du processeur par les processus système. Les valeurs des graphiques et leurs détails sont normalisés afin que la capacité totale soit de 100% quel que soit le nombre de cœurs virtuels.
image: https: //assets.digitalocean.com/articles/monitor-cpu/default-cpu-graph.png [Capture d’écran du graphique de la CPU par défaut]
Les graphiques vous permettent de voir si vous rencontrez des changements d’utilisation intermittents ou prolongés et vous aident à détecter les changements dans les habitudes d’utilisation du processeur d’un serveur.
Outre ces graphiques par défaut, vous pouvez installer l’agent DigitalOcean sur un droplet pour collecter et afficher des données supplémentaires. L’agent vous permet également de définir des stratégies d’alerte pour le système. Comment installer et utiliser l’agent DigitalOcean pour la surveillance peut vous aider à vous préparer up.
Une fois l’agent installé, vous pouvez définir des stratégies d’alerte pour vous informer de l’utilisation des ressources. Les seuils que vous choisirez dépendront de la charge de travail.
Exemple d’alerte
-
Surveillance du changement: CPU supérieure à 1% * + Si vous utilisez un Droplet principalement pour intégrer et absorber du code de test, vous pouvez définir une alerte légèrement supérieure aux modèles historiques afin de détecter si le nouveau code envoyé au serveur a augmenté le processeur. usage. Pour le graphique ci-dessus où le processeur n’atteint jamais 1%, un seuil de 1% d’utilisation du processeur pendant 5 minutes peut fournir un avertissement précoce concernant les modifications basées sur du code affectant l’utilisation du processeur.
image: https: //assets.digitalocean.com/articles/monitor-cpu/low-alert.png [Capture d’écran du formulaire de stratégie d’alerte rempli avec les valeurs du paragraphe précédent]
Sur la plupart des systèmes, il est fort probable que ce seuil soit totalement inapproprié. Toutefois, en ajustant la durée et en fixant un seuil légèrement supérieur à la charge moyenne actuelle, vous pouvez savoir dès le début qu’un nouveau code ou de nouveaux services ont un impact sur l’utilisation de l’UC.
-
Surveillance en cas d’urgence: utilisation de la CPU supérieure à 90% * + Vous pouvez également définir un seuil nettement supérieur à la moyenne, un seuil que vous considérez comme essentiel et qui nécessiterait une enquête rapide. Par exemple, si un serveur ayant subi une utilisation soutenue du processeur de 50% toutes les cinq minutes a subitement atteint 90%, vous pouvez vous connecter immédiatement pour examiner la situation. Là encore, les seuils sont spécifiques à la charge de travail du système.
Conclusion
Dans cet article, nous avons exploré + uptime +
et + top +
, deux utilitaires Linux courants qui fournissent des informations sur le processeur sur les systèmes Linux, ainsi que sur l’utilisation de DigitalOcean Monitoring pour afficher l’historique d’utilisation du processeur sur un droplet et vous alerter des changements et des urgences.
-
Pour en savoir plus sur la surveillance DigitalOcean, voir An Introduction à la surveillance DigitalOcean
-
Pour savoir comment choisir entre les forfaits Standard, Mémoire élevée et Processeurs élevés, voir Choosing the Right Droplet for ton application.
-
Si vous recherchez des services de surveillance plus détaillés, vous voudrez peut-être en savoir plus sur l’utilisation d’outils spécifiques tels que Zabbix, https: / /www.digitalocean.com/community/tutorials/how-to-install-icing-and-icinga-web-on-ubuntu-16-04[Icinga], et https://www.digitalocean.com/community/tutorials / comment-surveiller-les métriques-systèmes-avec-la-tick-pile-sur-ubuntu-16-04 [TICK] ou consulter la liste complète des https://www.digitalocean.com/community/tags/monitoring ? type = tutorials [DigitalOcean Monitoring] tutoriels.