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?
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
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.
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.
- swappiness peut avoir une valeur comprise entre 0 et 100
- swappiness = 0 indique au noyau d'éviter de changer de processus de la mémoire physique aussi longtemps que possible
- 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:
sudoedit /etc/sysctl.conf
- Ajouter cette ligne
vm.swappiness = 0
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/
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
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.
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.