Depuis des années, j'ai le même problème avec mes petites configurations Ubuntu: l'espace de swap utilisé augmente avec le temps. J'ai l'impression que cela est principalement dû au fait que la mémoire allouée ne revient jamais en RAM même s'il y a suffisamment d'espace pour cela, sauf dans le cas d'une action de l'utilisateur comme la désactivation du swap.
J'ai fait une courte cron
commande pour automatiser cela, et j'ai de bons résultats:
#! /bin/sh
echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab
Mais parce que c'est plus une astuce qu'une vraie solution à ce problème, je me demande quelles sont les raisons potentielles pour lesquelles ce pourrait être une mauvaise idée, ou comment pourrais-je améliorer ce script pour le rendre un peu plus intelligent?
Réponses:
L'utiliser comme ça: oui, mauvais. Vous devez vraiment vérifier s'il y a suffisamment de mémoire disponible avant de désactiver le swap. Voir /ubuntu//a/90399/15811 pour une meilleure version.
Aussi: en êtes-vous sûr? Le swap alloué ne signifie pas que le swap est utilisé. La commande
vmstat
, colonnessi
(swap in) etso
(swap out). Si ceux-ci restent 0, vous avez un autre problème. D'après mon expérience, le swap est à peine utilisé, et vous ne l'utilisez peut-être pas en pensant qu'il ne le vide pas mais qu'il n'y a rien à vider.la source
vmstat
plus.Je dirais que c'est une mauvaise idée. Si vous pensez que vous avez de la mémoire libre et qu'un processus actif n'est pas déplacé du swap vers la RAM, alors soit vous n'avez pas autant de mémoire libre que vous le pensez, soit le processus n'est pas aussi actif que vous le pensez. est.
Si un processus actif continue à être échangé, vous devez corriger tout ce qui cause une pression sur la mémoire. Si ce n'est pas un processus actif, quel est le problème?
la source
C'est une mauvaise idée.
Le noyau commence à copier (ne pas déplacer) les données à échanger bien avant que la mémoire physique soit proche d'être pleine, car si un processus nécessite jamais beaucoup de mémoire, toute page qui a déjà une copie valide dans l'échange peut être réutilisée immédiatement sans nécessiter une autre écriture sur le disque.
En général, cela se produit principalement pour les pages qui n'ont pas été consultées depuis longtemps, ce qui est un bon indicateur qu'il est peu probable qu'elles y soient bientôt accessibles.
Si vous supprimez explicitement les copies, cela n'apporte aucun avantage, car les données existent toujours dans la RAM, mais peuvent vous coûter de la vitesse lorsqu'un processus souhaite allouer beaucoup de mémoire et qu'un échange devient nécessaire.
Le noyau utilisera également toujours l'espace de swap dès que la mémoire physique est pleine à plus de 50%, donc ces nombres seront différents de zéro même si vous avez suffisamment de mémoire installée.
la source
/proc/sys/vm/swappiness
est laissé à sa valeur par défaut de70
, ce qui est bon pour les serveurs et affiche de manière assez agressive les pages sales des processus qui ne les ont pas touchées depuis un moment pour faire de la place pour plus de pagecache. C'est souvent mauvais pour les ordinateurs de bureau car alt-tab peut devenir lent.swappiness=70
), mais la latence est plus importante pour l'expérience utilisateur sur un bureau. C'est un compromis. Si vous compilez régulièrement des choses légèrement trop grandes pour rester dans la pagecache, alors bien sûr, laissezswappiness
un peu plus haut, comme 20 ou 30 au lieu de 5 ou 10. Voir aussi akitaonrails.com/2017/01/17/optimizing-linux-for -ordinateurs lents . Une valeurvm.vfs_cache_pressure
inférieure à 100 favorise également la mise en cache des métadonnées inode / répertoire sur les pages de données, ce qui est également intéressant pour la réactivité de l'interface utilisateur.C'est une mauvaise idée. Si cela était utile, le noyau Linux l'implémenterait de cette façon. Je ne pense pas qu'il y ait une raison de changer plus que quelques paramètres de réglage, car un script shell aussi simple n'est probablement pas plus intelligent que les algorithmes des développeurs du noyau.
Vous avez essentiellement deux cas:
Il y a donc deux points principaux:
Bien qu'il n'y ait pas de problèmes de mémoire insuffisante avec trop de programmes, certains programmes peuvent allouer de la mémoire en fonction de la mémoire RAM actuellement disponible (peut-être que votre navigateur utilisera plus de mémoire cache et vous pourrez naviguer plus rapidement) et le noyau peut utiliser de la mémoire RAM libre pour la mise en cache du disque et optimisations similaires. Lorsque vous forcez votre échange à être vide, le noyau supprimera son cache de lecture et, par exemple, le démarrage d'une nouvelle instance de Firefox prendra plus de temps que lorsque Firefox est toujours dans le cache de disque.
Si vous souhaitez régler le comportement du noyau, consultez le paramètre swappiness .
Deux ressources supplémentaires contribuent par @ peter-cordes:
Si vous voulez vraiment avoir un échange vide, vous pouvez désactiver l'échange de façon permanente. Je ne vois pas pourquoi l'avoir allumé pendant une heure puis le vider a des avantages par rapport à ne pas avoir d'échange.
la source
Vous pouvez obtenir les mêmes résultats en disant au noyau de libérer les caches:
De cette façon, vous évitez le bref instant de famine possible et laissez le noyau décider de ce qui est nécessaire et de ce qui peut être rejeté.
la source
Contrairement à l'idée commune SWAP en soi n'est pas mauvais .
Ce qui ralentit réellement votre système est l'activité du noyau qui déplace les données de la RAM vers le SWAP et les remet dans la RAM, le
swappiness
.Le système le fait automatiquement car il est configuré avec le
swappiness
.Cela fait que la mémoire des processus inactifs est transférée vers la partition d'échange de disque dur.
J'ai moi-même travaillé pendant des années avec une machine qui n'avait pas autant de mémoire RAM et j'ai toujours utilisé de la mémoire SWAP. Ma machine fonctionnait toujours bien jusqu'à ce que vous commenciez à replacer la mémoire dans la RAM, peut-être en essayant de fermer une application ouverte. Ensuite, la charge de travail a commencé à augmenter.
Je vous suggère plutôt d'étudier de près l'application qui utilise votre mémoire sur la ligne de commande avec l'
htop
application et de décider de fermer une application. Legnome-system-monitor
peut également vous donner un bon aperçu, dans son onglet Processus.Si vous avez de grandes applications qui utilisent beaucoup de RAM. Ne les exécutez pas tous en même temps.
la source