Qu'est-ce que la mémoire d'échange?

26

J'utilise de la RAM pour stocker certaines de mes tables de base de données et les autres sont stockées sur le disque dur.

Aujourd'hui, j'ai appris que mes processus utilisent la mémoire d'échange. Maintenant, qu'est-ce que la mémoire d'échange et comment puis-je détecter quel processus utilise la mémoire d'échange et comment puis-je les empêcher de l'utiliser?

030
la source
n'y a-t-il aucun moyen de savoir quels processus utilisent la mémoire d'échange ???
regardez le gestionnaire de tâches Windows (ou des outils similaires) pour la quantité de fichier d'échange utilisé et les erreurs de page.
L'échange n'est pas une opération par processus, c'est pour l'ensemble du système d'exploitation. "vmstat" vous montrera des informations sur la quantité de swap que vous utilisez.
jrockway
je travaille sur linux pas sur wimdows
a obtenu la raison de cette utilisation de swap ..... quelqu'un essayait d'analyser mon site c'est pourquoi tout le thng ws se passe sans aucune cause de notre côté.Merci pour vos réponses, cela m'a beaucoup aidé comme toujours :-)

Réponses:

41

Si vous manquez de mémoire physique, vous utilisez la mémoire virtuelle, qui stocke les données en mémoire sur le disque. La lecture à partir du disque est de plusieurs ordres de grandeur plus lente que la lecture à partir de la mémoire, donc cela ralentit tout le chemin. (L'échange de données entre la mémoire réelle et la mémoire virtuelle est un «échange». L'espace sur le disque est un «espace d'échange».)

Si votre application "utilise le swap", vous devez utiliser moins de mémoire ou acheter plus de RAM.

(L'échange est utile car les applications qui ne sont pas utilisées peuvent être stockées sur le disque jusqu'à ce qu'elles soient utilisées. Ensuite, elles peuvent être "paginées" et s'exécuter à nouveau normalement. Bien qu'elle ne soit pas en mémoire, le système d'exploitation peut utiliser cette mémoire pour autre chose, comme le cache disque. C'est donc une fonctionnalité très utile, mais si vous n'avez pas assez de mémoire physique pour exécuter votre programme, vous avez certainement besoin de plus de mémoire. Heureusement, la mémoire est vraiment très bon marché de nos jours.)

jrockway
la source
1
Par souci d'exactitude: la mémoire virtuelle signifie utiliser des adresses de mémoire virtuelle (quelque chose qui est toujours activé dans un processeur moderne, quel que soit le nombre de RAM disponible) et qui n'est pas directement liée à l'échange (bien qu'elles soient utilisées en combinaison, elles sont concepts fondamentalement différents).
fortran
@fortran, pour une double exactitude, la mémoire virtuelle est le terme que Windows utilise lorsqu'il se réfère au fichier d'échange (swap) .
sleblanc
7

Un ordinateur possède une certaine quantité de mémoire physique. Mais la plupart du temps, nous en voulons plus. Nous échangeons donc de la mémoire sur le disque.

Chaque fois que nous avons besoin de cette mémoire, elle doit être remise en mémoire (en échangeant une autre pièce). Il existe des algorithmes extrêmement intelligents pour minimiser le retard, mais parfois nous devons attendre.

Sous Windows, si vous regardez le gestionnaire de tâches, vous pouvez afficher les défauts de page de colonne. Cela montre le nombre de fois, une application demande un morceau de mémoire qui était sur le disque et doit être échangé. Beaucoup de défauts de page = application lente.

Ce processus est utilisé à plusieurs niveaux. Un résumé de rapide à lent:

  • Au niveau CPU, il y a des registres. Ce sont les mémoires les plus rapides mais leur quantité est limitée.
  • Sur le CPU, il y a également un petit cache mémoire. Ici, un petit morceau du programme en cours d'exécution est stocké pour un accès rapide. Recherchez des algorithmes de prédiction de branche si vous voulez en savoir plus.
  • Parfois, il existe des caches de niveau 2 entre le processeur et la mémoire principale.
  • Le niveau suivant est la mémoire principale (RAM).
  • Le dernier niveau et le plus lent de tous est le disque, parfois vous pouvez utiliser des clés USB comme mémoire supplémentaire.
Toon Krijthe
la source
3
cat /proc/pid/smaps

Si vous ne souhaitez pas utiliser swap, n'utilisez pas de partition swap (commentez la ligne /etc/fstab), mais cela empêchera de démarrer un nouveau processus et fera échouer malloc si vous manquez de mémoire physique. Ce n'est pas une bonne idée en général ... pas très sûr et même pas très utile, car le système d'exploitation gardera les pages chaudes en mémoire et échangera sur le disque celles qui ne sont pas utilisées récemment.

Une autre solution pourrait être de pirater votre base de données afin de verrouiller les pages en mémoire (je sais que cela peut être fait, mais je ne peux pas vous dire maintenant exactement comment), mais de toute façon, c'est comme si votre base de données utilisait son propre échange et mécanismes de mise en cache.

Pour savoir quel est l'échange et comment fonctionne la mémoire virtuelle ... Je vous recommande de jeter un œil à certaines conférences sur le système d'exploitation, peut-être que le MIT Open Courseware pourrait vous être utile.

fortran
la source
Étant donné que la configuration par défaut sur de nombreuses distributions Linux est de surcharger la mémoire, le "pire" qui se produira est que le tueur OOM commencera des processus de sniping, très probablement en commençant par le SGBD (et avec les tables "stockées dans la RAM", ce qui n'est probablement pas une bonne chose). chose).
symcbean
1

J'ai trouvé une réponse partielle. Une mémoire d'échange est un espace sur le disque dur de votre ordinateur que les systèmes d'exploitation utiliseront pour mettre les informations qui se trouvent réellement dans la RAM pour les libérer pour une autre application. Cela devrait être fait lorsque le système a besoin de mémoire pour un nouveau processus et qu'il n'y en a pas, donc nous pouvons voir que si notre système a beaucoup de RAM, il n'aura peut-être pas besoin de mémoire SWAP.

MISE À JOUR

Pour savoir où Swap l'espace (ou la mémoire virtuelle), vous pouvez aller à Task Manger (CTRL + ALT + DEL) et activer sur VIEW -> COLUMNS -> VIRTUAL MEMORY. Maintenant, calculez simplement la différence entre l'utilisation de la mémoire et la mémoire virtuelle. Voici également une instruction pour le voir si vous utilisez Vista: http://www.ehow.com/how_5067693_increase-swap-space.html

faya
la source
-1

Swap est l'espace disque dur utilisé comme RAM. Il est (relativement parlant) très lent, mais empêche les ordinateurs de planter lorsqu'ils essaient de traiter plus de données que leur RAM ne peut les gérer.

Pour empêcher les processus d'utiliser swap - installez plus de RAM.

Quentin
la source
1
Si vous ne voulez aucun échange, arrêtez d'utiliser un fichier d'échange. Mais attendez-vous à d'autres problèmes.
1
Ce n'est pas. L'échange déplace un bloc de données du disque dur vers la mémoire physique. Une lecture unique, qui est normalement assez rapide.
@xtofl la réponse ne mentionnait pas l'échange, juste l'échange de partition, et le commentaire de gamecat n'avait rien à voir avec ce que vous avez dit? : P
RapidWebs
-1

Si vous ne souhaitez pas que vos processus utilisent la mémoire d'échange, désactivez simplement la mémoire d'échange. Malheureusement, si jamais vous manquez de mémoire, le noyau Linux tuera certains de vos processus en cours afin de libérer de la mémoire pour utilisation.

Si vous avez suffisamment de RAM pour votre système, vous pouvez réellement vous passer de mémoire d'échange.

J'ai un ordinateur portable avec 768 Mo de RAM qui n'utilise pas de mémoire d'échange. C'est assez bon pour mes besoins. J'ai un serveur avec 256 Mo de RAM et n'utilise pas de mémoire d'échange. Il exécute 8 serveurs virtuels utilisant la virtualisation OpenVZ, sans problème non plus.

Donc, c'est à vous de décider si vous avez besoin de mémoire d'échange.

sybreon
la source
COMMENT exécutez-vous 8 VM sur une machine avec seulement 256 mégaoctets de RAM?!?
warren
C'est possible avec VZ parce que la RAM n'est pas complètement partitionnée car les bibliothèques communes sont partagées entre les machines virtuelles, ou quelque chose qui a un effet. Donc, 8 x 64M n'est pas nécessairement 512M. :)
sybreon
néanmoins - comment le périphérique sous-jacent fonctionne-t-il de manière stable?
warren
En remplaçant les programmes inactifs, vous disposez de plus de mémoire pour la mise en cache des fichiers. Et cela accélère les choses. cette lecture unique est généralement assez rapide et a un effet globalement négligeable. il n'est pas seulement utilisé lorsque vous sortez des limites en ce qui concerne votre RAM disponible. J'ai vu des machines avec 16 Go de RAM utiliser SWAP à certains moments.
RapidWebs
de plus, je ne recommanderais pas de désactiver SWAP sur un serveur de base de données. Ses clients ou son application Web ne seraient pas très satisfaits lorsque OOM tue le back-end tout au long d'une simple opération de sauvegarde nocturne, ou quelque chose de similaire? il serait plus intelligent de régler le cache de la base de données en fonction de l'utilisation de l'application et de la mémoire disponible. s'il échange déjà, il a besoin de plus de mémoire vive ou de mieux configurer son serveur de base de données. sinon, la désactivation de SWAP contraindrait le MOO à tuer le serveur de base de données à chaque fois qu'il est remplacé. qui à en juger par sa question, est souvent.
RapidWebs