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

250

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 la même utilisation de l’espace de swap demeure.

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

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

    
posée jfoucher 06.08.2010 - 08:43
la source

6 réponses

147

Ce n’est pas parce que le swap est alloué qu’il est «utilisé». Alors que les programmes tels que le moniteur système et le top afficheront une partie de votre espace de swap alloué (dans votre exemple, 770 Mo), cela ne signifie pas que le système échange activement / inactif.

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

Voici le résultat de l'exécution de 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 l’espace de swap est alloué: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached
    
réponse donnée popey 06.08.2010 - 12:04
la source
339

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

Cependant, si vous sentez que vous devez vraiment le forcer, (je peux voir un scénario où 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 en une seule commande

swapoff -a && swapon -a

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

    
réponse donnée SpamapS 06.08.2010 - 08:47
la source
119

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. À partir d'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 classique. Une valeur de swappiness = 10 est recommandée , mais n'hésitez pas à expérimenter.

En modifiant 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. Mettre cette valeur à 0 ne permet pas de désactiver le noyau Linux 3.4 et les versions inférieures, mais avec la version 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 sur 0 car tout ce qui frappe sur le disque est plus lent que la RAM. J'ai 8 cœurs virtuels, un SSD & amp; 8 Go de mémoire et mon swap est défini sur 0. À partir de ce moment, 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 576 Ko de 952 Mo et tous les systèmes fonctionnent correctement!

À partir d'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. Étant donné que 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 agressivement déplacés.

     
  1. swappiness peut avoir une valeur comprise entre 0 et 100
  2.   
  3. swappiness = 0 indique au noyau d'éviter de permuter les processus en dehors de la mémoire physique aussi longtemps que possible
  4.   
  5. 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
  6.   

Vous trouverez ci-dessous des instructions de base pour vérifier la permutation, 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 swap 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 réactiver l’échange:

sudo swapon --all

Pour définir définitivement swappiness à 0:

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

* Avec la version 3.5+ du noyau, le swappiness à 0 l'éteint complètement et une valeur de 1 est recommandée si vous voulez l'algorithme de swappiness le plus bas. source: lien

    
réponse donnée Elijah Lynn 11.06.2012 - 16:10
la source
46

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é, le moyen d'y parvenir est d'exécuter sudo swapoff -a; sudo swapon -a . Le problème ici est que si la RAM est insuffisante, cela causera toutes sortes de problèmes.

J'ai écrit un script que j'appelle toggle_swap et qui a fonctionné pour moi ces dernières années. Il vérifie qu'il y a suffisamment de RAM libre avant de désactiver le swap. La voici:

#!/bin/bash

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

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
    
réponse donnée Scott Severance 25.12.2011 - 17:35
la source
23

Après avoir passé quelques jours avec le swappiness , je suis arrivé à la conclusion que le noyau devrait être laissé à lui-même. Il sait ce qu'il fait et il est optimisé pour vous offrir la meilleure expérience possible.

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

    
réponse donnée Erigami 06.08.2010 - 18:34
la source
1

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é / échangé, vous n'avez pas à vous soucier de quoi que ce soit.

    
réponse donnée Rory 11.08.2010 - 21:35
la source

Lire d'autres questions sur les étiquettes