web-dev-qa-db-fra.com

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

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

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

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

Merci et salutations!

Éditer:

Merci!

J'aime aussi vraiment 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 celui qui a créé le serveur sans comprendre la charge actuelle.

L'échange est-il considéré comme presque identique à la mémoire? Par exemple, lorsque la mémoire et le swap sont presque de la même taille, si la mémoire est presque épuisée mais que le swap est encore largement libre, puis-je simplement le voir comme si le pourcentage de mémoire + swap utilisé n'est toujours pas élevé et exécuter d'autres nouveaux processus?

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

Sortie du haut:

$ top

 
 haut - 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 à l'arrêt, 0 zombie 
 CPU (s): 36,7% us, 19,7% sy, 0,0% ni, 43,6% id, 0,0% wa, 0,0% hi, 0,0% si, 0,0% st 
 Mem: 130766620k au total, 130161072k utilisé, 605548k gratuit, 919300k tampons 
 Échange: 63111312k total, 500556k utilisé, 62610756k gratuit, 124437752k mis en cache 
 
 UTILISATEUR PID PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND 
 6529 sanchez 18 -2 1075m 219m 13m S 100 0,2 13760: 23 MATLAB 
 13210 fléole 18 -2 48336 37m 1216 R 100 0,0 3: 56,75 absurdité 
 13888 fléole 18 -2 48336 37m 1204 R 100 0,0 2: 04,89 absurdité 
 14542 fléole 18 -2 48336 37m 1196 R 100 0,0 1: 08,34 absurdité 
 14544 fléole 18-2 2888 2076 400 R 100 0,0 1 : 06.14 recueillir Données 
 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 fléole 18 -2 48336 37m 1204 R 100 0,0 11: 33,93 absurdité 
 12438 fléole 18 -2 48336 37m 1216 R 100 0,0 5: 38,17 absurdité 
 13661 fléole 18 -2 48336 37m 1216 R 100 0,0 2: 44,13 absurdité 
 14098 fléole 18 -2 48336 37m 1204 R 100 0,0 1: 58,31 absurdité 
 14335 fléole 18 -2 48336 37m 1196 R 100 0,0 1: 08,93 absurdité 
 14765 fléole 18 -2 48336 37m 1196 R 99 0,0 0: 32,57 absurdité 
 13445 fléole 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 haut 
 1240 root 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 root RT -5 0 0 0 S 0 0.0 0: 01.01 migration/0 
 4 root 15 -5 0 0 0 S 0 0,0 0: 08,13 ksoftirqd/0 
 5 racine 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: 27.31 migration/1 
 7 racine 15 -5 0 0 0 S 0 0.0 0: 01.21 ksoftirqd/1 
 8 racine 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 racine RT -5 0 0 0 S 0 0.0 0: 00.00 chien de garde/2 
 12 root RT -5 0 0 0 S 0 0.0 4: 29.53 migration/3 
 13 root 15 - 5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd/3 
57
Tim

(1) Je vois que chacun des processus en cours d'exécution occupe un très petit pourcentage de mémoire (% MEM pas plus de 0,2%, et la plupart seulement 0,0%), mais comment la mémoire totale est presque utilisée comme dans la quatrième ligne de sortie ( "Mem: 130766620k au total, 130161072k utilisé, 605548k gratuit, tampons 919300k")? La somme du pourcentage de mémoire utilisée sur tous les processus semble peu susceptible d'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 des tampons partagés libres mis en cache 
 Mem: 2012 1923 88 0 91515 
 -/+ tampons/cache: 1316 695 
 Swap: 3153 256 2896 

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

La figure clé utilisée pour regarder est la valeur utilisée de tampons/cache ligne (1316). C'est l'espace que vos applications utilisent actuellement. Pour de meilleures performances, ce nombre doit être inférieur à votre mémoire totale (2012). Pour éviter les erreurs de mémoire insuffisante, il doit être inférieur à la mémoire totale (2012) et à l'espace d'échange (3153).

Si vous souhaitez voir rapidement la quantité de mémoire disponible, regardez la valeur de mémoire tampon/ligne libre (695). Il s'agit de la mémoire totale (2012) - la réelle utilisée (1316). (2012 - 1316 = 696, pas 695, ce sera juste un problème d'arrondi)

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

Cet article sur la moyenne de charge utilise une analogie de trafic agréable et est le meilleur que j'ai trouvé jusqu'à présent: Comprendre la charge du processeur Linux - quand devriez-vous vous inquiéter? . Dans votre cas, comme les gens l'ont souligné:

Sur un système multiprocesseur, la charge est relative au nombre de cœurs de processeur disponibles. La marque "100% d'utilisation" est de 1,00 sur un système monocœur, 2,00 sur un double cœur, 4,00 sur un quadricœur, etc.

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

56
Pascal Thivent

Les systèmes de type Unix, y compris linux, sont conçus pour rendre possible l'utilisation la plus efficace des RAM disponibles. En termes très généraux, il y a 3 états dans lesquels chaque Mo de RAM peut être:

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

Le troisième état n'est utilisé que comme espace de travail et est destiné à être réaffecté chaque fois que nécessaire, c'est-à-dire que la mémoire totale disponible pour les programmes est vraiment Free + UsedforBuffers. En tant que tel, vous ne verrez pas vraiment l'espace alloué au tampon apparaître comme affecté à un processus spécifique.

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

Le calcul de la moyenne de charge est mieux considéré comme une moyenne mobile des processus dans la file d'attente d'exécution de Linux marqués en cours d'exécution ou non interruptibles

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

17
Scott Pack

Depuis la page de manuel sar:

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

Depuis la page de manuel uptime:

 Les moyennes de charge système sont le nombre moyen de processus qui sont soit 
 Dans un état exécutable ou ininterrompu. Un processus dans un état exécutable 
 Utilise la CPU ou attend d'utiliser la CPU. Un processus en état terruptable unin - 
 Attend un accès E/S, par exemple en attente de disque. 
 Les moyennes sont prises sur les trois intervalles de temps. Les moyennes de charge 
 Ne sont pas normalisées pour le nombre de CPU dans un système, donc une moyenne de charge - 
 Âge de 1 signifie qu'un seul système CPU est chargé tout le temps sur un 4 
 Système CPU, cela signifie qu'il était inactif 75% du temps. 
  1. Linux, depuis un certain temps maintenant, gère sa mémoire d'une manière qui rend cette ligne de top fondamentalement inutile, gardant généralement la plupart de la mémoire de la machine allouée à diverses utilisations lorsqu'elle n'est pas requise par un processus utilisateur.
  2. La moyenne de charge est le nombre moyen de processus en cours d'exécution ou en attente d'exécution. Il a généralement une forte corrélation négative avec la latence/réactivité du système, vous devez donc la réduire le plus possible. Étant donné que chacun de vos processeurs peut exécuter quelque chose à un moment donné, cependant, vous semblez très bien à 14 ans.
3
chaos

La charge moyenne est une bonne chose. Il vous permet de comprendre ce qui se passe au-delà de l'utilisation à 100%, essentiellement: http://en.wikipedia.org/wiki/Load_%28computing%29

0
dmityugov