Est-ce une mauvaise idée de créer un script cron qui vide le swap toutes les heures?

25

Pendant des années, j'ai eu le même problème avec mes petites configurations Ubuntu: l'espace d'échange utilisé augmente avec le temps. J'ai l'impression que c'est principalement parce que la mémoire allouée ne retourne jamais à la RAM même s'il y a assez 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 commande cron 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 pose des questions sur les raisons potentielles pour lesquelles cela pourrait être une mauvaise idée, ou comment pourrais-je améliorer ce script pour le rendre un peu plus intelligent? p>     

posée Yvan Sraka 06.11.2017 - 15:25
la source

6 réponses

51

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 lien pour une meilleure version.

Aussi: en êtes-vous sûr? Swap étant alloué ne signifie pas que swap est utilisé. La commande vmstat , les colonnes si (swap in) et so (swap out). Si ceux-ci restent 0, vous avez un autre problème. Dans mon expérience, le swap est à peine utilisé, et vous ne l’utiliserez peut-être pas en pensant qu’il ne le vide pas mais qu’il n’ya rien à vider.

    
réponse donnée Rinzwind 06.11.2017 - 15:55
la source
41

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, vous n'avez pas autant de mémoire libre que vous le pensez ou le processus n'est pas aussi actif que vous le pensez. est.

Si un processus actif continue à être échangé, vous devriez réparer ce qui cause une pression sur la mémoire. Si ce n'est pas un processus actif, quel est le problème?

    
réponse donnée muru 06.11.2017 - 15:54
la source
34

C'est une mauvaise idée.

Le noyau commence à copier (ne pas déplacer) les données à permuter bien avant que la mémoire physique ne soit presque pleine, car si un processus nécessite beaucoup de mémoire, toute page qui possède déjà une copie valide dans swap peut être réutilisée immédiatement sans nécessitant une autre écriture sur le disque.

En général, cela se produit surtout pour les pages qui n’ont pas été consultées depuis longtemps, ce qui indique qu’il est peu probable qu’elles soient consultées prochainement.

Si vous supprimez explicitement les copies, cela n’apporte aucun avantage, car les données existent toujours dans la RAM, mais cela peut vous coûter cher lorsque certains processus souhaitent allouer beaucoup de mémoire et que l’échange devient nécessaire.

Le noyau utilisera également toujours l’espace de swap dès que la mémoire physique est au-dessus de 50%, donc ces nombres seront nuls même si vous avez suffisamment de mémoire installée.

    
réponse donnée Simon Richter 06.11.2017 - 16:40
la source
21

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 simple script shell n'est probablement pas plus intelligent que les algorithmes des développeurs du noyau.

Vous avez essentiellement deux cas:

  • Les processus dans l'espace d'échange ne sont de toute façon pas utilisés. Pourquoi voulez-vous les récupérer dans la RAM?
  • Il y a peu de RAM, ils sont donc échangés et vous les ramenez dans la RAM. Ensuite, votre système les remettra en échange le plus rapidement possible.

Il y a donc deux points principaux:

  1. Tout d'abord, votre système sera lent quand il y a trop peu de RAM pour exécuter tous vos programmes en même temps. Swap vous aidera à exécuter plus de programmes, mais pas à passer rapidement à un programme rarement utilisé, qui peut être échangé. Aucun swap ne peut tuer un utilisateur rarement utilisé ou lui envoyer une exception hors mémoire.
  2. Deuxièmement, le swap est une bonne chose, tout comme le fait d’avoir des trucs dans le swap, car vous avez de la mémoire vive au coût des programmes que vous n’utilisez pas de toute façon.

Bien qu’il n’y ait pas de problèmes de mémoire avec un trop grand nombre de programmes, certains programmes peuvent allouer de la mémoire en fonction de la mémoire vive actuellement disponible (votre navigateur utilisera plus de mémoire et vous pourrez parcourir plus rapidement) mise en cache du disque et optimisations similaires. Lorsque vous forcez votre swap à être vide, le noyau déposera son cache de lecture, par ex. le démarrage d'une nouvelle instance de Firefox prendra plus de temps que lorsque Firefox est encore dans le cache disque.

Si vous voulez régler le comportement du noyau, consultez le paramètre de permutation . .

Deux ressources supplémentaires contribuent par @ peter-cordes:

Si vous voulez vraiment avoir un swap vide, vous pouvez désactiver le swap de manière permanente. Je ne vois pas pourquoi l'avoir allumé pendant une heure et ensuite le vider présente des avantages par rapport au fait de ne pas échanger.

    
réponse donnée allo 06.11.2017 - 16:34
la source
5

Vous pouvez obtenir les mêmes résultats en demandant au noyau de libérer les caches:

echo 3 > /proc/sys/vm/drop_caches

De cette façon, vous évitez le bref moment d’absence possible de mémoire et laissez le noyau décider de ce qui est nécessaire et de ce qui peut être ignoré.

    
réponse donnée Alex C 07.11.2017 - 14:24
la source
0

Contrairement à l'idée commune, SWAP en lui-même 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 retourne dans la RAM, le swappiness .
Le système le fait automatiquement car il est configuré avec swappiness .
Cela fait que la mémoire des processus inactifs est transférée sur la partition de disque dur. J'ai moi-même travaillé pendant des années avec une machine qui ne contenait pas autant de mémoire RAM et j'avais toujours de la mémoire SWAP utilisée. Pourtant, ma machine fonctionnait correctement jusqu'à ce que vous commenciez à déplacer la mémoire dans la RAM, peut-être en essayant de fermer une application ouverte. La charge de travail a alors commencé à augmenter.

  • Ainsi, en nettoyant constamment votre mémoire SWAP, la charge de travail de votre machine augmentera considérablement.
  • En cours d’exécution, les applications qui ont leur mémoire sur la partition SWAP peuvent être corrompues.

Je vous suggère plutôt d'étudier de près quelle application utilise votre mémoire sur la ligne de commande avec l'application htop et décide de fermer certaines applications. Le gnome-system-monitor peut également vous donner une bonne idée, dans son onglet Process-Tab.
Si vous avez de grandes applications qui utilisent beaucoup de RAM. Ne les lancez pas tous en même temps.

    
réponse donnée Bodo Hugo Barwich 16.11.2017 - 14:37
la source

Lire d'autres questions sur les étiquettes