Je voudrais savoir si la sortie d'un linux basé sur Red-Hat pourrait être interprétée différemment par un linux basé sur Debian.
Pour rendre la question encore plus précise, ce que je recherche, c'est de comprendre comment la "charge moyenne" de la première ligne de la top
commande sur un système Red-Hat est interprétée et comment vérifier cela par la documentation officielle ro code.
[Il existe de nombreuses façons d'aborder ce sujet, qui sont toutes des réponses acceptables à la question]
Une approche potentielle serait de trouver où ces informations sont officiellement documentées.
Un autre serait de trouver la version du code qui top
est construite à partir de la distribution et de la version spécifiques sur lesquelles je travaille.
La sortie de commande que j'obtiens est:
top - 13:08:34 up 1:19, 2 users, load average: 0.02, 0.00, 0.00
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 96.8%id, 2.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3922520k total, 788956k used, 3133564k free, 120720k buffers
Swap: 2097148k total, 0k used, 2097148k free, 344216k cached
Dans ce cas, comment interpréter la valeur moyenne de la charge ?
J'ai réussi à localiser que la charge moyenne est d'environ la dernière minute, à partir d'une source de documentation et qu'elle doit être interprétée après avoir été multipliée par 100, par une autre source de documentation.
Donc, la question est:
est-il chargé à 0,02% ou 2%?
Sources et versions de la documentation:
1) Le premier étoiles avec
TOP(1) Linux User’s Manual TOP(1)
NAME
top - display Linux tasks
Source: man top
dans ma distribution RedHat,
Ubuntu a également la version avec "tâches" qui n'explique pas la moyenne de charge dans:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html
2) Le second commence par
TOP(1) User Commands TOP(1)
NAME top
top - display Linux processes
Source:
http://man7.org/linux/man-pages/man1/top.1.htm
3) Celui-ci commence par:
TOP(1)
NAME
top - display and update information about the top cpu processes
Source: http://www.unixtop.org/man.shtml
Le premier , peut être vu par man top
dans RHEL
ou dans online ubuntu documentation
et il n'a aucune explication sur le format de sortie (ni sur la moyenne de charge qui m'intéresse) .
La seconde , contient une brève explication, soulignant que la moyenne de charge a à voir avec la dernière minute, mais rien à propos de l'interprétation de sa valeur!
Je cite directement la deuxième source:
2a. Moyennes UPTIME et LOAD
Cette partie se compose d'une seule ligne contenant: le nom du
programme ou de la fenêtre, en fonction de
l'heure actuelle du mode d'affichage et de la durée écoulée depuis le dernier démarrage
nombre total d'utilisateurs
charge moyenne du système au cours des 1, 5 et 15 dernières minutes
Donc, si cette explication est en effet correcte, il suffit juste de comprendre que la moyenne de charge est d'environ la dernière minute.
Mais cela n'explique pas le format du nombre.
Dans la troisième explication, il dit que:
Lorsque vous spécifiez des nombres pour les moyennes de charge, ils doivent être multipliés par 100.
Cette explication suggère que 0,02 signifie 2% et non 0,02%. Mais est-ce exact? De plus, est-ce correct pour toutes les distributions de Linux et potentiellement différentes implémentations de top
?
Pour trouver la réponse à cette question, j'ai essayé de parcourir le code en le recherchant en ligne. Mais j'ai trouvé, au moins, deux versions différentes de top
RHEL sur le marché! le builtin-top.c
et le refactorisé top.c
. Tous deux protégés par Red-Hat, comme le dit l'avis au début du code, et il semble donc logique que RHEL en utilise un.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c
Donc, avant de plonger dans autant de code, je voulais une opinion sur où se concentrer pour former une compréhension précise de la façon dont la charge du processeur est interprétée?
À partir des informations fournies dans les réponses ci-dessous, en plus d'une recherche personnelle, j'ai trouvé que:
1 - Le top
que j'utilise est contenu dans le package procps-3.2.8. Ce qui peut être vérifié en utilisant top -v
.
2 - Dans la version procps-3.2.8
que j'ai téléchargée sur le site officiel, il semble que l'outil tire directement uptime
ses informations du procfs
fichier /proc/loadavg
(sans utiliser la fonction linux getloadavg()
).
3 - Maintenant, pour la top
commande, il n'utilise pas non plus la fonction getloadavg()
. J'ai réussi à vérifier que le top
fait fait les mêmes choses que leuptime
outil pour afficher les moyennes de charge. Il appelle en fait la uptime
fonction de l' outil, qui obtient ses informations du procfs
fichier /proc/loadavg
.
Donc, tout pointe vers le /proc/loadavg
fichier! Ainsi, pour avoir une compréhension précise du load average
produit par top
, il faut lire le code du noyau pour voir comment le fichier loadavg
est écrit.
Il y a aussi un excellent article souligné dans l'une des réponses qui fournit une explication en termes simples des trois valeurs de loadavg
.
Donc, malgré le fait que toutes les réponses ont été également utiles et utiles, je vais marquer celle qui a désigné l'article
http://www.linuxjournal.com//article/9001 comme "la" réponse à ma question. Merci à tous pour votre contribution!
De plus, à partir de la question Comprendre le sommet et la moyenne de charge , j'ai trouvé un lien vers le code source du noyau qui pointe vers l'endroit où loadavg
est calculé. Comme il semble qu'il y ait un énorme commentaire expliquant son fonctionnement, cette partie du code est également disponible C
!
Le lien vers le code est http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
Encore une fois, je n'essaye pas de m'engager dans une quelconque forme de plagiat, j'ajoute simplement ceci pour être complet. Donc, je répète que le lien vers le code du noyau a été trouvé à partir de l'une des réponses dans Comprendre le sommet et la charge moyenne ...
la source
top -v
)Réponses:
La charge CPU est la longueur de la file d'attente d'exécution, c'est-à-dire la longueur de la file d'attente des processus en attente d'exécution.
La
uptime
commande peut être utilisée pour voir la longueur moyenne de la file d'attente d'exécution au cours de la dernière minute, des cinq dernières minutes et des 15 dernières minutes, tout comme ce qui est généralement affiché partop
.Une valeur de charge élevée signifie que la file d'attente d'exécution est longue. Une valeur faible signifie qu'elle est courte. Ainsi, si la moyenne de charge d'une minute est de 0,05, cela signifie qu'en moyenne pendant cette minute, 0,05 processus étaient en attente d'exécution dans la file d'attente d'exécution. Ce n'est pas un pourcentage. C'est, AFAIK, le même sur tous les Unices (bien que certains Unices puissent ne pas compter les processus en attente d'E / S, ce que je pense que Linux; OpenBSD, pendant un certain temps seulement, a également compté les threads du noyau, de sorte que la charge était toujours de 1 ou plus).
L'
top
utilitaire Linux obtient les valeurs de charge du noyau, qui les écrit/proc/loadavg
. En regardant les sourcesprocps-3.2.8
, nous voyons que:sprint_uptime()
fonction est appeléetop.c
.proc/whattime.c
et appelsloadavg()
àproc/sysinfo.c
.LOADAVG_FILE
pour lire les moyennes de charge.LOADAVG_FILE
est défini précédemment comme"/proc/loadavg"
.la source
top
etuptime
ne sont pas des utilitaires POSIX et lagetloadavg()
fonction de bibliothèque n'est pas non plus définie dans POSIX (elle a cependant une lignée BSD).top
le fichier procfs loadavg ...La moyenne de charge est généralement calculée par le noyau. Des applications telles que
top
etuptime
peuvent utiliser l'getloadavg(3)
appel de bibliothèque pour y accéder (il est censé être portable sur différentes versions d'Unix). Sous Linux, cela se traduit généralement par une lecture de/proc/loadavg
. Sur FreeBSD, c'est un appel système.Par exemple:
uptime
et lestop
deux font des appels similaires pour obtenir leurs données.Désormais, les moyennes de charge de 1/5/15 minute correspondent au nombre de processus dans la file d'attente d'exécution. Différents systèmes d'exploitation peuvent calculer cela de différentes manières; la plus grande différence est normalement de savoir si les processus en attente d'E / S (par exemple bloqués sur le disque) comptent comme exécutables ou non. Sous Linux, ils le sont.
Ainsi, une moyenne de charge de 3,4 signifie qu'il y avait en moyenne 3,4 processus sur la file d'attente d'exécution dans la fenêtre d'exemple (1, 5, 15 minutes).
Cependant, une moyenne de charge élevée ne signifie pas nécessairement un serveur surchargé. Si vous avez 16 cœurs, votre charge moyenne peut être de 16 sans stress. Vous pouvez également avoir un grand nombre d'
fork()
appels d' application, ce qui peut entraîner la création / la destruction d'un grand nombre de processus, entraînant une moyenne de charge élevée, mais sans impact massif sur les performances du serveur. Il ne doit être utilisé qu'à titre indicatif, avec d'autres mesures telles que% CPU occupé.la source
La moyenne de charge n'est pas quelque chose de spécifique à un outil ou à une distribution en particulier, c'est une mesure fournie par le noyau, ou plus précisément, le planificateur, c'est donc une mesure indépendante de la distribution. La mesure est enregistrée dans le système de fichiers proc
/proc
Sur son interprétation, la métrique de charge moyenne n'est pas une indication de la force du processeur, mais de la quantité de travail à faire. Je ne pense pas qu'il soit vraiment nécessaire de le multiplier par quoi que ce soit, car il s'agit d'une mesure directe du nombre de processus dans un état exécutable ou ininterrompu.
Essayez de consulter les deux pages de manuel suivantes:
getloadavg(3)
etuptime
pour plus d'informations.La métrique de charge moyenne peut être un concept difficile à comprendre au début, je pense que beaucoup de gens pensent que c'est une indication de la force du processeur, mais ce n'est pas vraiment ça.
la source
getloadavg()
description de la fonction est la même moyenne de charge que latop
commande dans rhel affiche? Je pose cette question car j'ai effectué une recherche en texte intégral dans le contenu non goudronné du package procps-3.2.8 (qui est indiqué par la commandetop -v
) et il n'y a pas une seule mention de la fonction getloadavg ()! Donc, peut-être que top calcule la charge moyenne d'une manière différente ....