Vous rencontrez le problème Linux Ate My Ram .
Ne paniquez pas.
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 davantage de mémoire que la simple 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 (mémoires tampons)
- Mise en cache des données récemment lues / écrites sur le disque (cache)
- Absolument rien (gratuit)
Ce qui suit est un bref aperçu (et en grande partie incomplet) de la façon dont les systèmes Unix modernes signalent l’utilisation de la RAM.
Qu'est-ce que la mémoire libre (la définition du système d'exploitation) ?
Quand un système Unix rapporte la RAM en tant que Free, cela signifie "Je n'utilise cette RAM pour rien".
La RAM libre ne sert à rien, elle ne rend pas votre système plus rapide, elle reste simplement "libre" au cas où quelque chose en aurait besoin. Ce quelque chose pourrait être l'un des trois autres articles que j'ai mentionnés ci-dessus.
Que sont la mémoire cache et la mémoire tampon?
La mémoire cache et la mémoire tampon sont des ressources RAM utilisées par le système d'exploitation pour rendre votre système plus rapide.
Cette mémoire n'est pas nécessaire pour exécuter des programmes pour le moment . Votre système d'exploitation l'utilise donc pour stocker les données dont il a fréquemment besoin. Par exemple, la bibliothèque C (nécessaire à peu près à tous les programmes exécutés) est presque toujours conservée en cache
mémoire. Le système n'a pas besoin d'aller sur le disque pour trouver les instructions nécessaires pour imprimer "Hello World" à l'écran.
C'est en réalité beaucoup plus compliqué que cela - mémoire partagée, mémoire câblée , etc. - mais pour notre propos, cette explication simple convient.
Qu'est-ce que la mémoire active?
La mémoire active fait partie de la mémoire «utilisée» - la mémoire RAM que les applications utilisent, peu importe leur travail - tri des feuilles de calcul, édition de pages Web, édition de graphiques, etc.
La mémoire "active" a été "active" récemment - - le programme affirmant qu'il a utilisé son contenu (en lecture ou en écriture) et qu'il n'est pas considéré comme un bon candidat pour l'échange.
Qu'est-ce que la mémoire inactive?
Comme la mémoire active, la mémoire inactive est la RAM utilisée par les applications, quelle que soit leur activité. La différence, c’est que cette mémoire n’a pas été utilisée depuis un moment. Si le système le permet, le système d’exploitation pense qu’il peut être échangé sur un disque et (avec un peu de chance) le programme affirmant qu’il ne le demanderait plus. ne remarquerez jamais.
Qu'est-ce que la mémoire "utilisée" (définition HUMAN)?
Ce que vous et moi considérons comme mémoire "usagée" est essentiellement la somme des mémoires active et inactive. Toute la RAM actuellement réclamée par les applications pour leur utilisation.
Tant que vous avez plus de RAM installée que la somme de mémoire active et inactive (plus une marge de sécurité appréciable de 512-1024 Mo au-dessus), vous êtes dans un lieu sûr: votre système d'exploitation ne réussira probablement pas. .
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 légèrement plus compliqué que la simple mention "gratuite" de vos rapports de système d’exploitation. Lorsqu'un programme demande de la mémoire RAM, le système d'exploitation essaie de l'obtenir de la manière la moins perturbante possible:
- S'il y a de la mémoire libre disponible (ne rien faire), la RAM sera allouée.
- S'il n'y a pas de mémoire libre disponible, le système d'exploitation cannibalisera l'espace du cache et de la mémoire tampon: les éléments les moins récemment / les moins fréquemment utilisés dans le pool de mémoire tampon seront rejetés et la mémoire RAM attribuée au programme.
- S'il n'y a pas de RAM tampon / cache à cannibaliser, le swapper examinera la mémoire inactive et choisira les régions qu'il pense le moins susceptibles d'être utilisées. Ces données seront échangées (disque) et la RAM libérée par le programme.
- Si toute la RAM inactive a été permutée, le swapper commencera à mettre Active RAM sur le disque.
(C’est à peu près là où les performances vont le plus souvent aux chiens: chaque fois qu’un programme obtient son exécution sur le CPU, ses bits permutés doivent être ramenés dans la RAM, ce qui signifie que la mémoire active d’un autre programme doit être remplacée - la le chiffre d'affaires élevé dans l'échange s'appelle raclée )
- Si le système a échangé tout ce qu'il peut (et rempli la partition de swap), ou si vous exécutez un système sans partition de swap, il se passera de mauvaises choses . À ce stade, l'une des deux choses suivantes se produira:
malloc()
va échouer. Il s’agit du comportement conforme à POSIX: le système d’exploitation indique au programme qui demande la mémoire vive qu’il ne peut pas satisfaire la demande.
Le programme peut soit demander moins de RAM, soit s’il ne peut pas se contenter d’une plus petite quantité de mémoire, il peut le nettoyer et le quitter. (Si le programme est mal écrit, il va tout simplement planter.)
- Si vous êtes sur une machine Linux, le MOO-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 pouvez pas comprendre par ma description ici et ma réponse à la question liée, je pense que c'est une façon terrible de traiter le problème.
Pourquoi Free RAM augmente-t-il lorsque vous supprimez des fichiers?
Dans l'exemple de la question ci-dessous, vous avez remarqué qu'il est possible de "libérer" de la RAM en supprimant le fichier de sauvegarde. L'explication est assez simple: vu que rien n'utilise ce fichier (aucun descripteur de fichier ouvert) et qu'il n'est plus accessible depuis. le système de fichiers (non lié), le système d'exploitation sait que personne ne pourra plus accéder à ces données, et il purge les données du cache du système de fichiers.
Le système d'exploitation signale ainsi plus de mémoire disponible, mais n'a aucune incidence sur les performances du système.