web-dev-qa-db-fra.com

Linux Free montre une utilisation importante de la mémoire mais pas top

Sous RedHat Linux 6.2, je lance free -m Et il affiche presque tous les 8GB Utilisés

             total       used       free     shared    buffers     cached
Mem:          7989       7734        254          0         28       7128
-/+ buffers/cache:        578       7411
Swap:         4150          0       4150

Mais en même temps dans top -M, Je ne vois aucun processus utilisant toute cette mémoire:

top - 16:03:34 up  4:10,  2 users,  load average: 0.08, 0.04, 0.01
Tasks: 169 total,   1 running, 163 sleeping,   5 stopped,   0 zombie
Cpu(s):  0.7%us,  0.3%sy,  0.0%ni, 98.6%id,  0.4%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  7989.539M total, 7721.570M used,  267.969M free,   28.633M buffers
Swap: 4150.992M total,    0.000k used, 4150.992M free, 7115.312M cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1863 sroot     20   0  398m  24m 9.8m S  0.3  0.3   3:12.87 App1
    1 sroot     20   0  2864 1392 1180 S  0.0  0.0   0:00.91 init
    2 sroot     20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.07 migration/0
    4 sroot     20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    6 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    7 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.08 migration/1
    8 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1

J'ai aussi essayé ceci ps mem script mais il montre seulement environ 400 Mo de mémoire utilisée.

57
DarVar

Ne regardez pas la ligne "Mem", regardez celle en dessous.

Le noyau Linux consomme autant de mémoire que possible pour fournir le cache d'E/S (et d'autres mémoires tampons non critiques, mais le cache utilisera la plus grande partie de cette utilisation). Cette mémoire est abandonnée aux processus quand ils le demandent. La ligne "-/+ buffers/cache" affiche les valeurs ajustées après la comptabilisation du cache d’E/S, c’est-à-dire la quantité de mémoire utilisée par les processus et la quantité disponible pour les processus (dans ce cas, 578 Mo utilisés et 7411MB gratuit).

La différence de mémoire utilisée entre les lignes "Mem" et "-/+ buffers/cache" indique la quantité utilisée par le noyau aux fins de la mise en cache: 7734MB - 578MB = 7156MB dans le cache d'E/S. Si les processus ont besoin de cette mémoire, le noyau réduira simplement la taille du cache d'E/S.

111
cdhowie

En outre, comme le montre la première ligne, total used free shared buffers cached Mem: 7989 7734 254 0 28 7128 -/+ buffers/cache: 578 7411

Si nous ajoutons (mis en cache [7128] + tampons [28] + libre [254]), nous aurons environ la valeur [7411] libre de la deuxième ligne 7128 + 28 + 254 = 7410

14
Gnana

Si le cache est petit, essayez cette commande:

ps aux --sort -rss
0
李效伦