Comment comprendre l'utilisation de la mémoire et la charge moyenne sur le serveur Linux

57

J'utilise un serveur Linux qui a 128 Go de mémoire et 24 cœurs. J'utilise top pour voir à quel point il est utilisé. Sa sortie est collée à la fin du post. Voici deux questions:

(1) Je constate que chacun des processus en cours occupe un très faible pourcentage de mémoire (% MEM pas plus de 0,2% et la plupart juste 0,0%), mais comment la mémoire totale est presque utilisée comme dans la quatrième ligne de sortie ( "Mem: 130766620k total, 130161072k utilisé, 605548k gratuit, 919300k tampons")? La somme du pourcentage de mémoire utilisé sur tous les processus ne devrait pas atteindre presque 100%, n'est-ce pas?

(2) comment comprendre la charge moyenne sur la première ligne ("charge moyenne: 14.04, 14.02, 14.00")?

Merci et salutations!

Modifier:

Merci!

J'aime aussi beaucoup entendre des chiffres approximatifs basés sur le pourcentage de mémoire utilisé pour déterminer si un serveur est lourdement chargé, car je suis devenu une fois celui qui a créé le serveur sans comprendre la charge actuelle.

Le swap est-il considéré presque comme la mémoire? Par exemple, lorsque la mémoire et le swap ont presque la même taille, si la mémoire est presque épuisée mais que le swap est encore largement libre, puis-je le voir comme si le pourcentage utilisé de mémoire / swap n'était toujours pas élevé et exécuter un autre nouveau processus?

Comment envisagez-vous ensemble l'utilisation du processeur ou de la mémoire (ou de la mémoire + échange)? Etes-vous inquiet si l'un d'eux atteint trop haut ou les deux?

Sortie de haut:

$ top

 
top - 12:45:33 jusqu'à 19 jours, 23:11, 18 utilisateurs, charge moyenne: 14.04, 14.02, 14.00
Tâches: 484 au total, 12 en cours d'exécution, 472 en sommeil, 0 arrêté, 0 zombie
Cpu (s): 36.7% US, 19.7% Sy, 0.0% ni, ID 43.6%, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st
Mem: 130766620k total, 130161072k utilisé, 605548k gratuit, 919300k tampons
Swap: 63111312k total, 500556k utilisé, 62610756k gratuit, 124437752k en cache

  UTILISATEUR PID NI VIRT RES SHR S% CPU% MEM TIME + COMMAND
 6529 sanchez 18 -2 1075m 219m 13m S 100 0.2 13760: 23 MATLAB
13210 timothy 18 -2 48336 37m 1216 R 100 0.0 3: 56.75 absurdité
13888 timothy 18 -2 48336 37m 1204 R 100 0.0 2: 04.89 absurdité
14542 timothy 18 -2 48336 37m 1196 R 100 0.0 1: 08.34 absurdité
14544 timothée 18 -2 2888 2076 400 R 100 0.0 1: 06.14
 6183 sanchez 18 -2 1133m 195m 13m S 100 0.2 13676: 04 MATLAB
 6795 sanchez 18 -2 1079m 210m 13m S 100 0.2 13734: 26 MATLAB
10178 timothy 18 -2 48336 37m 1204 R 100 0.0 11: 33.93 absurdité 
12438 timothy 18 -2 48336 37m 1216 R 100 0.0 5: 38.17 absurdité
13661 timothy 18 -2 48336 37m 1216 R 100 0.0 2: 44.13 absurdité
14098 timothy 18 -2 48336 37m 1204 R 100 0.0 1: 58.31 absurdité
14335 timothy 18 -2 48336 37m 1196 R 100 0.0 1: 08.93 absurdité
14765 timothy 18 -2 48336 37m 1196 R 99 0.0: 32.57 absurdité
13445 timothy 18 -2 48336 37m 1216 R 99 0.0 3: 01.37 absurdité
28990 racine 20 0 0 0 0 S 2 0.0 65: 50.21 pdflush
12141 tim 18 -2 19380 1660 1024 R 1 0.0 0: 04.04 top
 1240 racine 15 -5 0 0 0 S 0 0.0 16: 07.11 kjournald
 9019 racine 20 0 296m 4460 2616 S 0 0.0 82: 19.51 kdm_greet
    1 racine 20 0 4028 728 592 S 0 0.0 0: 03.11 init
    2 racine 15 -5 0 0 0 S 0 0.0 0: 00.00 kthreadd
    3 racine RT -5 0 0 0 S 0 0.0 0: 01.01 migration / 0
    4 racine 15 -5 0 0 0 S 0 0.0 0: 08.13 ksoftirqd / 0
    5 root RT -5 0 0 0 S 0 0.0 0: 00.00 chien de garde / 0
    6 racine RT -5 0 0 0 S 0 0.0 17: migration de 27: 31/1
    7 racine 15 -5 0 0 0 S 0 0.0 0: 01.21 ksoftirqd / 1
    8 root RT -5 0 0 0 S 0 0.0 0: 00.00 chien de garde / 1
    9 racine RT -5 0 0 0 S 0 0.0 10: 02.56 migration / 2
   10 racine 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 2
   11 root RT -5 0 0 0 S 0 0.0 0: 00.00 chien de garde / 2
   12 racine RT -5 0 0 0 S 0 0.0 4: 29.53 migration / 3
   13 racine 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 3
Tim
la source
2
Voir ceci pour une bonne réponse à propos de la mémoire. serverfault.com/questions/38065/#38074
Zoredache
Et cette réponse pour un résumé rapide sur la charge moyenne (ou cette longue lecture pour les détails).
Nickolay

Réponses:

56

(1) Je constate que chacun des processus en cours occupe un très faible pourcentage de mémoire (% MEM pas plus de 0,2% et la plupart juste 0,0%), mais comment la mémoire totale est presque utilisée comme dans la quatrième ligne de sortie ( "Mem: 130766620k total, 130161072k utilisé, 605548k gratuit, 919300k tampons")? La somme du pourcentage de mémoire utilisé sur tous les processus ne devrait pas atteindre presque 100%, n'est-ce pas?

Pour voir la quantité de mémoire que vous utilisez actuellement, exécutez free -m. Il fournira une sortie comme:

             total utilisé des tampons partagés libres mis en cache
Mem: 2012 1923 88 0 91 515
- / + tampons / cache: 1316 695
Swap: 3153 256 2896

La valeur de la rangée supérieure 'utilisée' (1923) correspondra presque toujours presque à la valeur de la rangée supérieure (2012). Puisque Linux aime utiliser n'importe quelle mémoire disponible pour mettre en cache des blocs de disque (515).

Le chiffre clé à examiner est la valeur des tampons / lignes de cache utilisées (1316). Il s'agit de la quantité d'espace actuellement utilisée par vos applications. Pour de meilleures performances, ce nombre doit être inférieur à votre mémoire totale (2012). Pour éviter les erreurs de mémoire insuffisante, l'espace mémoire total (2012) et l'espace de permutation (3153) doivent être inférieurs.

Si vous souhaitez voir rapidement combien de mémoire est libre, consultez la valeur de mémoire tampon / rangée de cache (695). Ceci est la mémoire totale (2012) - la valeur réelle utilisée (1316). (2012 - 1316 = 696, pas 695, ce ne sera qu'un problème d'arrondi)

(2) comment comprendre la charge moyenne sur la première ligne ("charge moyenne: 14.04, 14.02, 14.00")?

Cet article sur la charge moyenne utilise une analogie de trafic intéressante et est la meilleure que j'ai trouvée jusqu'à présent: Comprendre la charge CPU de Linux - Quand devriez-vous vous inquiéter? . Dans votre cas, comme les gens l'ont souligné:

Sur un système multiprocesseur, la charge est fonction du nombre de cœurs de processeur disponibles. La note "100% d'utilisation" est de 1,00 sur un système monocœur, de 2,00, sur un système à double cœur, de 4,00 sur un système à quatre coeurs, etc.

Ainsi, avec une charge moyenne de 14,00 et 24 cœurs, votre serveur est loin d’être surchargé.

Pascal Thivent
la source
17

Les systèmes de type Unix, y compris Linux, sont conçus pour utiliser le plus efficacement possible la RAM disponible. En termes très généraux, il y a 3 états par Mo de RAM:

  1. Libre
  2. Utilisé par un processus
  3. Utilisé pour les tampons

Le 3ème état est utilisé uniquement comme espace de travail et doit être réaffecté chaque fois que nécessaire. En d'autres termes, votre mémoire totale disponible pour les programmes est vraiment Free + UsedforBuffers. En tant que tel, vous ne verrez pas vraiment l'espace alloué dans la mémoire tampon comme affecté à un processus spécifique.

Votre question de charge moyenne est un peu plus intéressante, car elle peut facilement être mal interprétée. Pour l'histoire complète voir cet article de linuxjournal . Le meilleur résumé est une citation directe de l'article,

Le calcul de la moyenne de charge est mieux pensé comme une moyenne mobile des processus dans la file d'attente d'exécution de Linux marquée en cours d'exécution ou ininterruptible

Cela signifie que vous pouvez considérer votre charge moyenne comme (nombre de processus en cours d'exécution) + (nombre de processus en attente d'IO). En gardant à l'esprit qu'à tout moment vous pouvez avoir $ CORE nombre de processus en cours d'exécution, je dirais que votre charge moyenne de 14 est assez basse.

Scott Pack
la source
Merci! Quel est le pourcentage utilisé de mémoire (ou mémoire + échange) considéré comme étant chargé et qu'il est préférable de ne pas exécuter de nouveaux processus? Avez-vous regarder à la fois la mémoire ou la mémoire + échange? Le swap utilisé est-il indiqué dans la partie supérieure de la taille du swap réellement utilisée? Concernant la charge moyenne du processeur, mesurez-vous la charge réelle par "nombre moyen de charges / noyau"? A quel point considéreriez-vous que le serveur est lourdement chargé? Merci et salutations!
Tim
2
La charge est juste un indicateur. En règle générale, une charge de plus de cœurs est une mauvaise chose. Généralement, un pourcentage élevé de mémoire utilisée est une mauvaise chose. Ce n'est pas une valeur binaire que vous pouvez dire «tout va bien». Si vous manquez de RAM, vous n'en avez pas assez pour exécuter plus de processus. Si vous ne manquez pas, vous en avez beaucoup. Cela dépend beaucoup des spécificités de votre situation.
Cian
4

De la sarpage de manuel:

       La moyenne de charge est calculée comme le nombre moyen de runnable ou 
       tâches en cours d'exécution (état R) et nombre de tâches non interrompues
       sommeil (état D) sur l'intervalle spécifié.

De la uptimepage de manuel:

       La charge système moyenne est le nombre moyen de processus qui sont soit
       dans un état exécutable ou ininterruptible. Un processus en état d'exécution
       est soit en utilisant le processeur ou en attente d'utiliser le processeur. Un processus en un
       L’état de transition est en attente d’un accès E / S, par exemple en attente d’un disque.
       Les moyennes sont prises sur les trois intervalles de temps. Charge moyenne
       ne sont pas normalisés pour le nombre de CPU dans un système, donc une charge moyenne
       âge de 1 signifie qu'un seul système CPU est chargé tout le temps alors que sur 4
       Système CPU cela signifie qu'il était inactif 75% du temps.
Dennis Williamson
la source
3
  1. Depuis quelque temps, Linux gère sa mémoire de manière à rendre cette ligne pratiquement topinutilisable, en gardant généralement la majeure partie de la mémoire de la machine allouée à diverses utilisations lorsque cela n’est pas requis par un processus utilisateur.
  2. La charge moyenne est le nombre moyen de processus en cours d'exécution ou en attente d'exécution. Il existe généralement une forte corrélation négative avec la latence / réactivité du système, vous devez donc le réduire au maximum. Étant donné que chacun de vos processeurs peut exécuter quelque chose à tout moment, vous semblez vous débrouiller plutôt bien à 14 ans.
le chaos
la source
Merci! En ce qui concerne 1, voulez-vous dire que certains processus n'apparaissent pas en haut mais utilisent beaucoup de mémoire? Ou que la quatrième ligne de sortie sur la mémoire ("Mem: 130766620k total, 130161072k utilisé, 605548k libre, 919300k tampons") est trompeuse, je devrais regarder la somme du pourcentage de mémoire utilisée par tous les processus montrés en haut et dans mon cas Je peux exécuter en toute sécurité de nouveaux processus consommant de la mémoire?
Tim
2
Comme d'autres réponses l'ont fait remarquer, la charge moyenne devrait être comparée au nombre de processeurs, de sorte que 14 processeurs ne sont pas si importants sur un système à 24 cœurs. Ce serait un peu comme 14/24 = 0,58 sur un système monocœur (bien genre de).
David Z
@ Tim: je veux dire le dernier.
chaos