Vous faites l'expérience de la Linux a mangé ma mémoire vive question.
Pas de panique.
Ce n'est PAS un problème.
Votre système fonctionne comme prévu.
Le problème ne vient pas de votre système d'exploitation, mais de votre compréhension de ce qu'est la mémoire "libre".
Les systèmes Unix utilisent la mémoire pour d'autres raisons que l'exécution de programmes. La mémoire peut être utilisée pour :
- Programmes en cours d'exécution (actifs/utilisés)
- Mise en mémoire tampon des données en transit (buffers)
- Mise en cache des données récemment lues ou écrites sur le disque (cache)
- Absolument rien (gratuit)
Ce qui suit est un bref aperçu (et largement incomplet) de la manière dont les systèmes Unix modernes rapportent l'utilisation de la mémoire vive.
Qu'est-ce que la mémoire libre ? (définition de l'OS) ?
Lorsqu'un système Unix indique que la mémoire vive est Gratuit cela signifie "je n'utilise pas cette mémoire vive pour quoi que ce soit".
Gratuit La mémoire vive ne sert à rien - elle ne rend pas votre système plus rapide, elle reste simplement "libre" au cas où quelque chose en aurait besoin. Cette chose peut être n'importe lequel des trois autres éléments que j'ai mentionnés ci-dessus.
Qu'est-ce que la mémoire cache et la mémoire tampon ?
La mémoire cache et la mémoire tampon sont des éléments de la mémoire vive que le système d'exploitation utilise pour rendre votre système plus rapide.
Cette mémoire est n'est pas nécessaire pour exécuter des programmes pour l'instant Par exemple, la bibliothèque C (nécessaire à presque tous les programmes que vous exécutez) se trouve presque toujours dans le répertoire cache
Le système n'a donc pas besoin d'aller chercher sur le disque les instructions dont il a besoin pour imprimer "Hello World" à l'écran.
C'est en fait beaucoup plus compliqué que cela. partagé mémoire, câblée mémoire, etc. -- mais pour notre propos, cette simple explication suffit.
Qu'est-ce que la mémoire active ?
La mémoire active fait partie de la mémoire "utilisée", c'est-à-dire de la mémoire vive que les applications utilisent pour leurs activités, qu'il s'agisse de trier des feuilles de calcul, d'afficher des pages web, d'éditer des graphiques, etc.
La mémoire "active" a été "active" récemment : le programme qui la réclame a utilisé son contenu (lecture ou écriture), et elle n'est pas considérée comme un bon candidat à l'échange.
Qu'est-ce que la mémoire inactive ?
Comme la mémoire active, la mémoire inactive est la mémoire vive que les applications utilisent pour ce qu'elles font. La différence réside dans le fait que cette mémoire n'a pas été utilisée depuis un certain temps, de sorte que, le cas échéant, le système d'exploitation pense qu'elle peut être transférée sur le disque et (avec un peu de chance) que le programme qui la réclame ne la sollicitera plus, de sorte qu'il ne s'en apercevra jamais.
Qu'est-ce que la mémoire "utilisée" ? (la définition HUMAINE)
Ce que vous et moi considérons comme la mémoire "utilisée" est essentiellement la somme de la mémoire active et de la mémoire inactive. Toute la mémoire vive actuellement réclamée par les applications pour leur utilisation.
Tant que vous avez plus de mémoire vive installée que la somme de la mémoire active et de la mémoire inactive (plus une marge de sécurité de 512 à 1024 Mo), vous êtes en bonne position : Votre système d'exploitation probablement n'atteindra pas le swap et ne nuira pas à la performance.
Qu'est-ce que la mémoire "libre" ? (la définition HUMAINE) ?
Ce que vous et moi considérons comme de la mémoire "libre" est la mémoire disponible pour exécuter des programmes.
C'est un peu plus compliqué que le simple chiffre "libre" indiqué par votre système d'exploitation. Lorsqu'un programme demande de la RAM, le système d'exploitation essaie d'obtenir cette RAM de la manière la moins perturbante possible :
- S'il y a de la mémoire libre disponible (qui ne fait rien), cette RAM sera allouée.
- S'il n'y a pas de mémoire libre disponible, le système d'exploitation cannibalisera l'espace de cache et de mémoire tampon : Les éléments de la mémoire tampon auxquels on accède le moins souvent ou le plus rarement sont éliminés et la mémoire vive est attribuée au programme.
- S'il n'y a pas de RAM tampon/cache à cannibaliser, l'échangeur examinera la mémoire inactive et choisira les régions qu'il pense être les moins susceptibles d'être accédées. Ces données seront paginé vers le swap (disque), et la mémoire vive nouvellement libérée est donnée au programme.
- Si toute la mémoire vive inactive a été échangée, l'échangeur commence à placer de la mémoire vive active sur le disque.
(C'est à peu près à ce moment-là que la performance s'effondre : Chaque fois qu'un programme utilise l'unité centrale, ses bits échangés doivent être ramenés dans la mémoire vive, ce qui signifie que la mémoire active d'un autre programme doit être échangée -- le taux de rotation élevé des swaps est appelé battage )
- Si le système a échangé tout ce qu'il pouvait (et rempli la partition d'échange), ou si vous utilisez un système sans une partition d'échange, Mauvaises choses se produisent. À ce stade, l'une des deux choses suivantes se produira :
malloc()
échouera. C'est le comportement conforme à POSIX - le système d'exploitation indiquera au programme qui demande de la RAM qu'il ne peut pas satisfaire cette demande.
Le programme peut soit demander moins de RAM, soit, s'il ne peut pas se contenter d'une plus petite partie de la mémoire, nettoyer et quitter. (Si le programme est mal écrit, il se plantera tout simplement).
- Si vous êtes sur une machine Linux, l'option OOM-Killer peut se lancer dans une folie meurtrière de type gang, mettant fin à d'autres processus pour tenter de libérer suffisamment de mémoire vive pour répondre à la demande.
Au cas où vous ne l'auriez pas compris à la lecture de ma description ici et de ma réponse à la question liée, je pense que c'est une très mauvaise façon de traiter le problème.
Pourquoi la mémoire vive libre augmente-t-elle lorsque vous supprimez des fichiers ?
Dans l'exemple de la question, vous avez remarqué qu'il est possible de "libérer" de la RAM en supprimant le fichier de sauvegarde - l'explication est assez simple : Puisque rien n'utilise ce fichier (aucun gestionnaire de fichier ouvert) et qu'il n'est plus accessible à partir du système de fichiers (non lié), le système d'exploitation sait que personne n'accèdera plus jamais à ces données, et il purge les données du cache du système de fichiers.
Cela permet au système d'exploitation de signaler plus de mémoire libre, mais n'a pas d'impact sur les performances du système.