Pourquoi l'utilisation de la mémoire dans "top" ne s'additionne pas?

28

J'ai remarqué que parfois, lorsque je lance en haut , l'utilisation de la mémoire de chaque processus dans la table de processus ne semble pas correspondre au total.

Par exemple, dans le vidage ci-dessous, top indique que j'utilise 16 Go de mémoire. Cependant, le tableau des processus ne montre que deux processus utilisant un peu plus de 520 Mo. Comment savoir ce qui consomme les 15,5 Go restants? (J'utilise CentOS.)

$ top

top - 12:16:34 jusqu'à 45 jours, 2:28, 3 utilisateurs, charge moyenne: 0,24, 0,65, 0,71
Tâches: 274 au total, 1 en cours d'exécution, 273 en sommeil, 0 arrêté, 0 zombie
CPU (s): 2,3% us, 0,2% sy, 0,0% ni, 97,5% id, 0,0% wa, 0,0% hi, 0,0% si, 0,0% st
Mem: 16432032k au total, 16340144k utilisé, 91888k gratuit, 21736k tampons
Échange: 18481144k au total, 1112k utilisés, 18480032k gratuit, 15624488k mis en cache

  UTILISATEUR PID PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND
18159 jsmith 15 0 260m 31m 4560 S 16,6 0,2 53: 35,64 python
 4795 26 15 0260 m 6608 4220 S 2,0 0,0 0: 00,06 maître de poste
    1 racine 15 0 10344 680 568 S 0,0 0,0 0: 39,36 init
    2 racine RT -5 0 0 0 S 0,0 0,0 0: 00,53 migration / 0
    3 racine 34 19 0 0 0 S 0,0 0,0 0: 00,62 ksoftirqd / 0
    4 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 0
    5 RT racine -5 0 0 0 S 0.0 0.0 0: 02.09 migration / 1
    6 racine 34 19 0 0 0 S 0,0 0,0 0: 01,32 ksoftirqd / 1
    7 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 1
    8 RT racine -5 0 0 0 S 0.0 0.0 0: 00.99 migration / 2
    9 racine 34 19 0 0 0 S 0,0 0,0 0: 01,74 ksoftirqd / 2
   10 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 2
   11 RT racine -5 0 0 0 S 0.0 0.0 0: 02.16 migration / 3
   12 racine 34 19 0 0 0 S 0,0 0,0 0: 01,30 ksoftirqd / 3
   13 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 3
   14 racine RT -5 0 0 0 S 0,0 0,0 0: 01,94 migration / 4
   15 racine 34 19 0 0 0 S 0,0 0,0 0: 01,78 ksoftirqd / 4
   16 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 4
   17 RT racine -5 0 0 0 S 0,0 0,0 0: 01,92 migration / 5
   18 racine 34 19 0 0 0 S 0,0 0,0 0: 01,30 ksoftirqd / 5
   19 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 5
   20 racine RT -5 0 0 0 S 0.0 0.0 0: 02.06 migration / 6
   21 racine 34 19 0 0 0 S 0,0 0,0 0: 01,83 ksoftirqd / 6
   22 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 6
   23 RT racine -5 0 0 0 S 0.0 0.0 0: 02.31 migration / 7
   24 racine 34 19 0 0 0 S 0,0 0,0 0: 01,50 ksoftirqd / 7
   25 racine RT -5 0 0 0 S 0,0 0,0 0: 00,00 chien de garde / 7
   26 racine 10-5 0 0 0 S 0,0 0,0 0: 00,42 événements / 0
   27 racine 10-5 0 0 0 S 0,0 0,0 0: 00,28 événements / 1
   28 racine 10-5 0 0 0 S 0,0 0,0 0: 00,37 événements / 2
   29 racine 10-5 0 0 0 S 0,0 0,0 0: 00,21 événements / 3
   30 racine 10-5 0 0 0 S 0,0 0,0 0: 00,38 événements / 4
   31 racine 10-5 0 0 0 S 0,0 0,0 0: 00,27 événements / 5
   32 racine 10-5 0 0 0 S 0,0 0,0 0: 00,52 événements / 6
   33 racine 10-5 0 0 0 S 0,0 0,0 0: 00,64 événements / 7
   34 racine 10-5 0 0 0 S 0,0 0,0 0: 00,00 khelper
del
la source

Réponses:

26

À partir des lignes liées à l'utilisation de la mémoire en haut:

Mem: 16432032k total, 16340144k used, 91888k free, 21736k buffers
Swap: 18481144k total, 1112k used, 18480032k free, 15624488k cached

Ignorons l'échange. La mémoire totale est égale à la somme de la mémoire utilisée et de la mémoire libre. Utilisé, d'autre part, est la somme de «vraiment utilisé par les applications» et mis en cache et tampons. Donc, dans votre cas, ça se passe comme ceci:

  • Mem = 16432032k = 16340144k + 91888k;
  • "Vraiment utilisé par les applications" = Utilisé - (mis en cache + tampons) = 16340144k - (15624488k + 21736k) = 693920k.

Les 15,5 autres Go sont mis en cache. Cela améliore les performances. Cependant, au moment même où une application nécessite une partie de la mémoire cache, elle lui est immédiatement donnée. Vous le remarquerez si vous exécutez une application et un moniteur gourmands en mémoire top.

grs
la source
1

Cette liste ne me semble pas être un 274 totalprocessus. Le haut n'affiche généralement que ce qui tient sur votre terminal / écran. Utilisez à la ps auxplace et ajoutez la rssvaleur (ou la colonne de mémoire résidente affichée par votre version).

Vous ne voulez pas non plus ajouter la taille de la mémoire virtuelle, il semble que vous soyez réellement intéressé par la REScolonne resident ( ).

Daniel Beck
la source