web-dev-qa-db-fra.com

Pourquoi mon système utilise-t-il autant de mémoire cache?

Auparavant, sur mon ordinateur de bureau exécutant Ubuntu 14.04, j'avais 4 Go de RAM, ce qui, à mon avis, devrait être suffisant. Cependant, après un certain temps, mon ordinateur semble devenir lent. J'ai une application de surveillance des ressources système dans mon panneau Gnome, ce qui, je suppose, représente le RAMdisponible (?). Il montre une zone vert foncé comme étant "Mémoire" et une zone vert clair comme "Cache". Le "cache" grossirait lentement jusqu'à remplir tout le graphique, puis le chargement des programmes serait lent ou le changement de programme prendrait un certain temps.

Je pourrais atténuer quelque peu le problème avec cette commande, mais finalement le cache de l'ordinateur se remplit à nouveau, donc ce n'est qu'un pansement:

Sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

Alors, j’ai pensé que j’aurais plus de RAM, j’ai donc remplacé une clé de 2 Go par une clé de 8 Go et j’ai maintenant 10 Go de RAM.

Et mon "cache" toujours se vide lentement et mon ordinateur ralentit en conséquence. De plus, parfois, l'ordinateur démarre avec le "cache" maximum au premier démarrage et à la connexion. Ce n'est pas toujours le cas, mais je ne sais pas s'il existe un modèle qui en détermine la cause.

Pourquoi Ubuntu utilise-t-il tant de mémoire cache? 10 Go ne suffisent pas pour Ubuntu?

Voici à quoi ressemble mon moniteur système dans mon panneau Gnome. Le carré du milieu indique l'utilisation de RAM. La zone vert clair est la "cache":

Cache near max

Ceci est ma mémoire et mon historique d’échange, qui ne semble contenir aucune information sur le "cache". Je me rends compte à ce stade que je ne suis pas tout à fait clair sur la différence entre "cache" et "swap":

memory and swap

4
Questioner

Vous probablement avez besoin de réduire votre swappiness.

Le noyau considère qu'il est préférable d'utiliser la mémoire RAM libre comme cache plutôt que d'expulser les pages de cache et de la marquer comme réellement libre. Cultiver la cache est généralement une bonne chose.

Maintenant, la question se pose de savoir quoi faire quand toute la mémoire est allouée au cache et que votre application a besoin de plus de mémoire. Souvent, la bonne chose à faire est d'expulser une page du cache et de la remettre à votre application, mais il est parfois avantageux d'échanger une page rarement utilisée, de la donner à votre application et de conserver le cache intact.

Ce processus est contrôlé de manière lâche par /proc/sys/vm/swappiness. Pour plus d'informations, veuillez consulter les excellentes réponses à Pourquoi la plupart des gens recommandent-il de réduire swappiness à 10-20? et Comment configurer swapiness? .

8
sмurf

Votre système utilise beaucoup de mémoire cache, car il est là pour la prise de stock et peut vous aider à aller plus vite.

La mise en cache consiste généralement à placer une copie de quelque chose qui est soit lent à récupérer, soit lent à calculer quelque part, ce qui est plus rapide à récupérer. Un programme peut stocker le résultat d’un calcul en mémoire, un proxy Web peut stocker une copie d’une ressource du Web sur une machine de votre réseau local et, dans ce cas, un système peut stocker des données des disques durs dans RAM (et quelques autres données).

Et comme le système fonctionne plus rapidement, il est logique d'utiliser chaque kilo-octet qui n'est pas utilisé par autre chose. Les options pour un bloc de mémoire que rien d'autre n'utilise sont après tout:

                      |Use For Cache | Don't Use For Cache
——————————————————————+——————————————+————————————————————
Data needed again     |Faster system | No difference
Data not needed again |No difference | No difference

Par conséquent, vous devez toujours utiliser chaque bit de mémoire qui ne fait rien pour le cache.

Un système qui utilise 10% de la RAM utilisée pour diverses tâches et 90% de celle-ci utilisée pour le cache ne doit pas être considéré comme "saturé". Il devrait être considéré comme étant utilisé à 10%, avec 90% supplémentaires gratuits et donc utilisé pour le cache alors que rien n'en a besoin.

Cependant, si nous considérons l’échange, c’est presque le contraire de la mise en cache des données du disque en RAM: la mise en cache utilisant RAM pour accélérer les E/S (et potentiellement d’autres choses), la pagination utilise l’espace disque pour étendre RAM.

Ainsi, lorsque le système utilise tous ses RAM et qu'il en a besoin davantage, il dispose de deux options:

  1. Jetez une partie du cache, car ce n'est qu'une optimisation après tout.
  2. Page sur certains RAM utilisés pour autre chose.

Il n'y a pas de réponse universelle à la question de savoir lequel de ces choix est le meilleur. La réponse parfaite dépend de nombreuses choses impossibles à prédire, et même la meilleure réponse dépend de nombreuses choses qui dépendent de la configuration de votre système et de la façon dont vous l’utilisez.

Notez que ces actions opposées ont un sens à la fois: l’une concerne la hiérarchisation des informations dont vous aurez probablement besoin pour obtenir lentement, l’autre consiste à ne pas hiérarchiser les informations dont vous n’aurez pas besoin bientôt.

250 Mo n'est pas beaucoup, donc je ne serais pas très inquiet, mais pour un système de bureau à haute RAM pour une utilisation interactive (plutôt que sur serveur), je pourrait expérimentez avec la réduction de la rapidité, pour changer l’équilibre ici. Cette réponse explique très bien pourquoi cela ne fera probablement pas beaucoup de différence, mais il est raisonnable d'essayer pour voir si cela va.

Vous devez d'abord traiter un problème beaucoup plus important, à savoir que quelqu'un exécute de temps en temps Sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches" sur votre machine, ce qui efface les données d'accès rapide des _ autrement inutilisées RAM. et oblige le système à recalculer ou à récupérer ce qu'il devrait pouvoir récupérer de la mémoire. Cela ralentira le système, et le RAM sera un gaspillage d'argent.

5
Jon Hanna

Et mon "cache" continue à s’épuiser lentement et mon ordinateur ralentit en conséquence.

Vous devrez chercher ailleurs la cause de votre ralentissement. la mémoire décrite comme "cache" est la mémoire que le noyau peut librement jeter si quelque chose d'autre a besoin de RAM. Ce sont des choses comme les données récemment lues sur le disque.

This , bien qu'assez ancien, reste une description raisonnable de certaines des pièces mobiles du sous-système de mémoire. Comme il est dit,

Linux a cette règle de base: une page de RAMlibre est une RAM perdue.

Peu importe la quantité de RAM que vous avez, votre cache augmentera pour le remplir. Ce n'est pas une cause d'inquiétude. Loin de là, c’est une optimisation des performances très significative - RAM est environ 100 fois plus rapide qu’un SSD rapide , ne pas avoir à lire à partir du disque est une victoire énorme.

4
RAOF