Pourquoi Red Hat Linux rapporte-t-il moins de mémoire libre sur le système que ce qui est réellement disponible?

9

J'ai un serveur Red Hat Linux domestique relativement petit (environ 8 Go de RAM). Je ne l'utilise pas pour autre chose que pour exécuter des applications locales pour garder une trace de diverses choses. Les seules choses réelles qui s'exécutent sur la boîte sont une base de données et un serveur Web.

J'ai remarqué que lors de la vérification des compteurs système à l'aide d'outils comme NMON et TOP, la mémoire totale libre du système est relativement faible (de l'ordre de quelques centaines de Mo), tandis que la mémoire active de la base de données et du serveur Web est encore faible (seulement consommant 3 Go combinés). Même en incluant tous les autres processus en cours d'exécution, la mémoire totale consommée est inférieure à 4 Go.

Pourquoi Red Hat Linux rapporte-t-il moins de mémoire libre que la mémoire totale moins la somme totale de la mémoire utilisée des processus en cours?

Aaron K
la source

Réponses:

19

Ne confondez pas la mémoire libre avec la mémoire inutilisée. La mémoire libre, dans le monde Unix, est une page de mémoire physique qui ne contient aucune donnée logique. Certaines données de la mémoire inutilisée sont mappées, mais elles ne sont actuellement pas utilisées activement par un processus en cours d'exécution.

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

Linux (et tous les OS Unix) essaient d'avoir le moins de mémoire libre possible. Au lieu de cela, ils utilisent de la mémoire qui n'est pas activement mappée aux processus dans le système d'exploitation en cours d'exécution pour des choses comme le cache de fichiers et les tampons pour diverses opérations de transfert d'E / S.

Une autre chose qui peut vous dérouter est que vous ne pouvez pas simplement ajouter la mémoire utilisée par tous les processus en cours d'exécution pour obtenir une mémoire totale utilisée. Si vous tentez cela, vous découvrirez rapidement que vos applications semblent utiliser plus de mémoire qu'il n'en existe réellement sur la machine. C'est pour deux raisons

  1. La mémoire peut être partagée entre différents processus, grâce à l' allocation de mémoire Copy-On-Write , à la mémoire IO mappée et aux bibliothèques dynamiques partagées .
  2. Le système d'exploitation est libre de promettre plus de mémoire à l'application qu'il n'en a réellement fourni. La théorie étant que la plupart des rédacteurs d'applications préfèrent demander de grandes quantités de mémoire en une seule fois, pour éviter les frais généraux, et peuvent ne pas réellement utiliser toute cette mémoire.

Il y a un article récent sur lwn.net traitant de cette question .

Dave Cheney
la source
1
Une explication simple est également fournie ici: linuxatemyram.com
Steven T. Snyder
4

Linux mettra activement en cache les accès au système de fichiers en mémoire pour accélérer les temps d'accès au disque. Il n'y a rien à craindre.

Exécuter free -m sur la boîte vous donnera une meilleure idée de l'endroit où la mémoire est utilisée.

Ci-dessous, la sortie tirée de l'une de mes boîtes. La mémoire disponible est de 147 Mo avec près de 4 Mo de mémoire cache pour les demandes d'accès au système de fichiers.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722
Ryaner
la source
1

Incluez-vous également les champs "tamponnés" et "mis en cache"?

jj33
la source
1

Avec linux, regardez Committed_AS dans / proc / meminfo, c'est la quantité de mémoire (réel + swap) que le noyau a réellement promis d'exécuter des processus.

Linux utilise la mémoire très efficacement, tous les blocs non promis à certains processus sont utilisés pour mettre en cache les fichiers récemment / fréquemment consultés. Ainsi, il est typique que Linux utilise 90% de toute la mémoire physique disponible peu de temps après le démarrage.

Regardez ce que le noyau s'est engagé à fournir .. et une utilisation sale (swap), cela vous donne une meilleure image globale.

Si vous avez besoin d'ajuster ce comportement, veuillez mettre à jour votre question :)

Il s'agit du MO standard pour Linux. Certaines distributions modifient la gestion de la mémoire pour répondre à leurs besoins via sysctl. Cependant, ce que vous signalez est assez typique de tous.

Tim Post
la source
1

Quel type de noyau utilisez-vous sur le système? Un noyau 32 bits ne rapportera qu'environ 3,6 Go de mémoire, sauf s'il est compilé avec PAE activé.

En disant que, s'il s'agit d'une version moderne de Redhat Enterprise Linux (ou CentOS) - à partir de la v3 - le noyau 32 bits par défaut aura cette option activée.

Si vous pouviez publier la sortie de la commande «libre» détaillée ci-dessus, nous serons en mesure de voir si c'est le problème ou non.

Mike Pountney
la source