Question Comment vider swap s'il y a de la RAM libre?


Lorsque j'ouvre une application RAM-intensive (VirtualBox définie à 2 Go de RAM), un espace de swap est généralement utilisé, en fonction de ce que j'ai ouvert à ce moment-là.

Cependant, lorsque je quitte cette dernière application, les 2 Go de RAM sont libérés, mais le même espace de permutation reste disponible.

Par exemple, environ deux heures après la fermeture de VirtualBox, je dispose de 1,6 Go de mémoire vive et de 770 Mo d’échange.

Comment puis-je dire à Ubuntu d'arrêter d'utiliser cet échange et de revenir à l'utilisation de la RAM?


255
2017-08-06 06:43


origine


La chose la plus facile redémarrez votre appareil et économiser du temps d'adaptation à la RAM et à la puissance de sauvegarde de l'ordinateur portable et du processeur - Mohamed Slama
Une grande hypothèse est que le repeuplement de toutes les choses sur votre ordinateur prend moins de temps. - jQwierdy


Réponses:


Ce n'est pas parce que swap est alloué qu'il est "utilisé". Alors que les programmes tels que le moniteur système et le haut afficheront une partie de votre espace de swap alloué (dans votre exemple, 770 Mo), cela ne signifie pas que le système échange activement des données.

Pour savoir si quelque chose est interchangeable, vous pouvez utiliser le vmstat commander. Laissez-le tourner quelques secondes pour vous installer et regarder la si (swapin) et so (swapout) colonnes. Si rien ne se passe, il n’ya aucune raison de s’inquiéter.

Voici le résultat de l'exécution vmstat 1, où vous pouvez voir que ma machine ne change pas du tout.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

Pourtant, ici, dans top vous pouvez voir que j'ai un espace d'échange alloué: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached

146
2017-08-06 10:04



«Aucune raison de s’inquiéter», jusqu’à ce que je continue à utiliser certaines applications échangées. alors tout l'enfer se déchaîne. - törzsmókus
Ce post ne répond pas à la question. - emchristiansen
La prémisse de la question repose sur des idées fausses. Ce post répond aux idées fausses. - popey
Je ne vois pas une idée fausse, je vois un désaccord sur ce que signifie "utilisé". Vous voulez dire "utilisé" pour faire référence à un échange actif / inactif, alors que la question d'origine semble se poser avec "utilisé", ce qui signifie qu'il y a des données qui ont été échangées, qui devront ensuite être ré-échangées. des raisons valables pour vouloir vider le swap après un événement qui échange beaucoup de mémoire, en préemptant essentiellement l'échange actif que l'utilisateur sait se produire plus tard (surtout si le "dés-échange" ultérieur est susceptible de se produire le disque est en charge pour d'autres raisons). - drfrogsplat
Après avoir exécuté une application gourmande en mémoire, mes autres applications ne réagissent pas lorsque je passe à celles-ci, probablement parce qu'elles ont été échangées. Il serait préférable de demander au système de retirer autant de données que possible (suivi d'une pause-café) plutôt que d'attendre 20 secondes chaque fois que je fais Alt + Tab. - Mark K Cowan


Le noyau Linux sous-jacent à Ubuntu "basculera" automatiquement ces pages du disque vers la RAM si nécessaire, donc en général, je dirais simplement que cela se produit naturellement.

Cependant, si vous sentez que vous devez vraiment le forcer, (je peux voir un scénario dans lequel vous voudriez savoir que le système sera réactif plus tard), vous pouvez désactiver et réactiver momentanément le swap

sudo swapoff -a
sudo swapon -a

OU alternativement comme une seule commande

swapoff -a && swapon -a

Faites attention à cela, car vous risquez de rendre votre système instable, surtout si sa mémoire vive est déjà faible.


348
2017-08-06 06:47



Cela a fait l'affaire, le swap a été copié sur ram. Je suppose que vous avez juste besoin de vous assurer d'avoir au moins la quantité de swap utilisée comme RAM libre avant de lancer swapoff, non? - jfoucher
Le swap n'a pas été copié en RAM. Il était simplement désactivé. Vous devez vous assurer que la boîte ne change pas avant de le faire. Si vous le faites, alors le noyau verra la mémoire disparaître et le OOM-Killer commencera probablement à tuer des applications arbitrairement. Il n'y a aucune raison pour que vous deviez «nettoyer» l'échange comme celui-ci. (voir mon autre commentaire) :) - popey
En fait, le swap est, en gros, copié sur ram, ou plus exactement, les pages sont ré-transférées du disque vers la RAM avant que le swap puisse être désactivé. - SpamapS
Les pages sont copiées dans la RAM uniquement si elles sont encore nécessaires par un processus. Parfois, une page échangée appartient à un processus déjà terminé et le noyau ne souhaite pas supprimer ces pages du swap immédiatement. - BrunoJCM
Cela devrait être la bonne réponse, car c'est le moyen de récupérer les pages échangées dans la RAM, puis de vider la mémoire d'échange. - Alfonso Jiménez


Vous pouvez également définir votre valeur de "swappiness" à partir de la valeur par défaut de 60, de cette façon, le swap ne deviendra pas si grand pour commencer. Pourquoi la valeur par défaut est définie sur 60 lorsque la valeur recommandée est 10 me rend perplexe. De la Ubuntu SwapFAQ:

Le paramètre par défaut dans Ubuntu est swappiness = 60. La réduction de la valeur par défaut de swappiness améliorera probablement les performances globales pour une installation de bureau Ubuntu typique. Une valeur de swappiness = 10 est recommandée, mais n'hésitez pas à expérimenter.

En changeant cette valeur à 10 ou même à 0, vous pouvez ajouter un gain de vitesse significatif et perceptible à un système plus ancien avec un lecteur lent. Si vous définissez cette valeur sur 0, le noyau 3.4 et les versions antérieures de Linux ne sont pas désactivées, mais avec 3.5+, vous souhaiterez utiliser la valeur 1 si vous souhaitez conserver le paramètre le plus bas *.

Je ne vois aucune raison de ne pas définir cette valeur à 0, car tout ce qui frappe le disque est plus lent que la RAM. J'ai 8 cœurs virtuels, un SSD rapide et 8 Go de mémoire et mon swap est défini sur 0. A ce jour, 3 machines virtuelles sont en cours d'exécution, mon utilisation de la mémoire est de 7,1 Go en 7.1, mon swap utilisé est seulement de 576 Ko. 952 Mo et tous les systèmes fonctionnent bien!

De la Ubuntu SwapFAQ:

Le paramètre swappiness contrôle la tendance du noyau à déplacer les processus de la mémoire physique et sur le disque d'échange. Comme les disques sont beaucoup plus lents que la RAM, cela peut ralentir les temps de réponse du système et des applications si les processus sont trop agressifs.

  1. swappiness peut avoir une valeur comprise entre 0 et 100
  2. swappiness = 0 indique au noyau d'éviter de changer de processus de la mémoire physique aussi longtemps que possible
  3. swappiness = 100 indique au noyau de permuter de manière agressive les processus de la mémoire physique et de les déplacer pour échanger le cache

Vous trouverez ci-dessous des instructions de base pour vérifier le swappiness, vider votre swap et changer le swappiness à 0:

Pour vérifier la valeur de permutation:

cat /proc/sys/vm/swappiness

Pour définir temporairement le swap sur 0 (comme suggéré par SpamapS):

Cela videra votre échange et transférera tout le swap en mémoire. Tout d'abord, assurez-vous d'avoir suffisamment de mémoire disponible en consultant l'onglet Ressources de gnome-system-monitor, votre mémoire libre devrait être supérieure à votre swap utilisé. Ce processus peut prendre un certain temps, utilisez gnome-system-monitor pour surveiller et vérifier la progression.

sudo swapoff --all

Pour définir la nouvelle valeur sur 0:

sudo sysctl vm.swappiness=0 

Pour revenir à l'échange:

sudo swapon --all

Pour définir définitivement swappiness à 0:

  1. sudoedit /etc/sysctl.conf 
  2. Ajouter cette ligne vm.swappiness = 0 
  3. sudo shutdown -r now # redémarrer le système

* Avec la version 3.5+ du noyau, le paramètre swappiness à 0 l'éteint complètement et une valeur de 1 est recommandée si vous souhaitez utiliser l'algorithme de permutation le plus bas. la source: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/


119
2018-06-11 14:10



Cela devrait être la réponse acceptée. - quant
Je viens de mettre à jour la réponse pour inclure un moyen permanent de définir la permutation. Je ne suis pas certain de la façon dont il a été tellement voté, je suppose que personne ne l'a testé. - Elijah Lynn
Plus de bonnes lectures sur le swappiness dans cette réponse => askubuntu.com/a/103916/11929 - Elijah Lynn
Ajout d'une note sur le comportement de swappiness = 0 avec le noyau Linux version 3.5+. - Elijah Lynn
Je ne suis pas sûr que cela soit disponible lorsque l'auteur a initialement publié la réponse, mais une valeur de permutation de «60» est en place pour les installations de serveur Ubuntu, car cet environnement possède un ensemble de spécifications différent. help.ubuntu.com/community/… - Frito


J'ai constaté que la vidange de swap peut être très utile sur les systèmes à disques lents et à mémoire vive limitée. Bien sûr, comme déjà mentionné, la façon de faire est de courir sudo swapoff -a; sudo swapon -a. Le problème est que si la RAM est insuffisante, cela entraînera toutes sortes de problèmes.

J'ai écrit un script que j'appelle toggle_swap cela a fonctionné pour moi depuis plusieurs années. Il vérifie qu'il y a suffisamment de RAM libre avant de désactiver le swap. C'est ici:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

46
2017-12-25 16:35



C'était vraiment utile, merci! - Luke Cousins
Hé, c'est la meilleure solution. Merci! - Fabio A. Correa
Génial, je cherchais quelque chose comme ça. Peut-être que pour être un peu plus en sécurité, vous pourriez présenter le nombre et les pourcentages, puis demander, juste pour être absolument certain. - Atherion
J'ai mis à jour le code et créé une base gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c - Jekis
C’est la conclusion à laquelle je suis arrivé après avoir lu tous les conseils, comme si l’on devait s’assurer qu’il y avait suffisamment de RAM avant de tuer le swap. Merci monsieur, script magnifique. Devrait être inclus dans Ubuntu par défaut (pas de blague, c'est vraiment un musthave) - Shiki


Après avoir traîné avec swappiness pendant quelques jours, je suis arrivé à la conclusion que le noyau devrait être laissé à ses propres périphériques. Il sait ce qu'il fait et il est optimisé pour vous offrir la meilleure expérience.

Sauf si vous avez une bonne raison de vouloir récupérer ce disque, je le laisserais.


23
2017-08-06 16:34



J'ai eu quelques trucs dans swap, vmstat m'a montré que swapin et swapout étaient en train de se passer, et Chrome était en retard, alors que mon processeur était à peine utilisé. Assez bonne raison, non? - Xerus


Cela n'affecte pas les performances si votre espace d'échange est occupé. La seule pénalité de performance est que les choses entrent / sortent du swap. Si rien n'est échangé ou échangé, vous n'avez à vous soucier de rien.


1
2017-08-11 19:35



Ouais mais si quelque chose est être échangé Est-ce que affecter la performance, d'où cette question. - quant