Forum Linux.debian/ubuntu swap question débutant

Posté par . Licence CC by-sa.
Tags : aucun
1
18
juin
2019

Bonjour,

j'ai un Rasperry Pi chez moi où j'ai installé un serveur grâce à Yunohost. J'y héberge un blog, mes mails, nextcloud, etc.
Pour surveiller un peu j'ai installé Rpi-monitor qui me fournit quelques statistiques et infos sur l'état de mon Pi :

Titre de l'image

Je m'aperçois que le swap utilisé augmente petit à petit chaque jour. Est-ce normal ? Peut-on le "vider" ?

Merci.

  • # Le swap c'est bon, mangez-en

    Posté par (page perso) . Évalué à 10 (+12/-0). Dernière modification le 18/06/19 à 19:30.

    Le swap sur une machine avec un stockage « normal » est une bonne chose. Sur une carte mémoire c'est une autre histoire car cela dépend beaucoup de la qualité de la carte en question (on limite les écritures sur les cartes moyen de gamme. Les cartes bas de gamme sont à proscrire. Problème, il n'y a pas de méthode simple pour savoir dans quelle catégorie se trouve une carte).

    Ta copie d'écran montre que la mémoire n'est pas utilisée en totalité. Il est probable que cela ne montre pas la mémoire utilisée par les caches du système de stockage.
    Dans ton cas, le swap est probablement utilisé pour stocker des morceaux de mémoire inutilisés ou rarement utilisés. Cela permet donc au noyau de stocker plus de choses dans les caches sus-nommés.
    Le remplissage du swap augmente progressivement, pour faire de la place aux caches qui se remplissent.
    Le noyau équilibre la pression sur la mémoire et le temps perdu à écrire/lire en swap.

    Sur une machine dont une partie de la mémoire est réellement non utilisée (ni par les programmes, ni par les caches, etc), le swap est tout de même un peu rempli « préventivement ». Cela permet à la machine d'être plus réactive lorsqu'un besoin de mémoire survient.
    Dans le cas d'une machine qui a de la mémoire disponible, le swap contient des données qui sont toujours présentes en mémoire. S'il faut alouer de la mémoire, ce qui est en mémoire est bazardé (car présent dans le swap). S'il faut utiliser les données en mémoire, le swap est conservé tant qu'il n'y a pas d'écriture. Une écriture en mémoire invalide la partie du swap correspondante.

     
    Pour vider le swap (on désactive puis on réactive) :

    swapoff -a && swapon -a

     
    Pour vider les caches (en principe avant de vider le swap) :

    echo 3 > /proc/sys/vm/drop_caches

     
    Ou plus optimalement (désactiver, vider, réactiver) :

    swapoff -a && echo 3 > /proc/sys/vm/drop_caches && swapon -a

     
    Tu peux régler le (la ?) « swappiness », c'est à dire la tendance à mettre les données dans le swap (réglage de la pression indiqué plus haut).

    Afficher la valeur actuelle :

    sysctl vm.swappiness
    # ou
    cat /proc/sys/vm/swappiness

     
    Modifier jusqu'au prochain démarrage à la valeur 10 (très peu de mise en swap) :

    sysctl -w vm.swappiness=10
    # ou
    echo 10 > /proc/sys/vm/swappiness

     
    Modifier pour le prochain démarrage :

    cat > /etc/sysctl.d/mon-swappiness-perso.conf << 'HEREDOC'
    vm.swappiness = 10
    HEREDOC
    # puis application immédiate
    sysctl --load /etc/sysctl.d/mon-swappiness-perso.conf
    • [^] # Re: Le swap c'est bon, mangez-en

      Posté par . Évalué à 1 (+0/-0).

      Merci pour cette réponse détaillée!

    • [^] # Re: Le swap c'est bon, mangez-en

      Posté par . Évalué à 1 (+0/-0). Dernière modification le 18/06/19 à 20:50.

      J'ai fait : swapoff -a && echo 3 > /proc/sys/vm/drop_caches && swapon -a

      Mais maintenant mon swap est à 100%.

      Edit : autant pour moi, j'ai relancé Rpi-monitor et le swap est à 0%.

    • [^] # Re: Le swap c'est bon, mangez-en

      Posté par . Évalué à 1 (+0/-0). Dernière modification le 18/06/19 à 20:54.

      Par contre, que veut dire : NaN% ?

      Titre de l'image

      • [^] # Re: Le swap c'est bon, mangez-en

        Posté par (page perso) . Évalué à 7 (+6/-0).

        NaN c'est pour Not a Number. Ce pourcentage serait le résultat de la division 0/0, ce qui n'a pas de sens ; on peut donc retrouver cette notation en fonction des langages, des affichages, etc.

        Debian Consultant @ DEBAMAX

      • [^] # Re: Le swap c'est bon, mangez-en

        Posté par (page perso) . Évalué à 4 (+2/-0).

        que veut dire : NaN% ?

        Ça veut dire que les développeurs n'ont pas une bonne hygiène de code :-)
        Tu n'as probablement pas réactivé le swap, sa taille totale est à zéro (Total: 0B), je suppose que le code utilise directement la valeur zéro pour calculer le pourcentage, sans vérifier au préalable la validité des données.

        • [^] # Re: Le swap c'est bon, mangez-en

          Posté par . Évalué à 1 (+0/-0). Dernière modification le 18/06/19 à 22:09.

          J'ai bien fait la commande pour réactiver le swap : swapon -a

          Mais, bizarrement, ça n'a rien changé.
          J'ai redémarré le serveur et là le swap affiche bien 0% : Used: 0B (0.00%) Free: 500.00MB Total: 500.00MB

          J'imagine donc que quelque chose ne va pas si je fais : swapon -a

          • [^] # Re: Le swap c'est bon, mangez-en

            Posté par . Évalué à 5 (+3/-0).

            Je pense plutôt que rpi-monitor ne supporte pas qu'on change la taille du swap (ou qu'on le désactive). Tu as eu le soucis à swapoff, et maintenant à swapon. Bref, faut relancer rpi-monitor à chaque fois.

            En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # NaN%

    Posté par . Évalué à 1 (+0/-0).

    Bonsoir,

    je reviens car tout à l'heure j'ai refait swapoff -a && swapon -a et de nouveau (le swap s'était rempli à plus de 30% en deux jours, sur le swap total de 500MB) j'ai affiché dans Rpi-monitor : NaN% au lieu de 0%.

    Si je fais un htop j'ai également une erreur (??)
    Titre de l'image
    On voit mal sur la capture d'écran, mais il y a marqué "0K/0K".

    Pourquoi cet affichage de NaN% et 0K et non pas 0% et pour htop 0K/500MB ?

    Si je redémarre le serveur tout va rentrer dans l'ordre mais j'aimerais savoir ce qui cloche. Et puis-je laisser le swap se remplir comme ça ? Pourquoi se remplit-il aussi vite d'ailleurs ? Est-ce que je dois en rechercher la cause et comment ?

    Merci des pistes et conseils.

    • [^] # Re: NaN%

      Posté par (page perso) . Évalué à 2 (+0/-0).

      il y a marqué "0K/0K"

      Ça veut dire « zéro K / zéro K ». Donc ton swap n'est pas réactivé.

      En ligne de commande, tapes swapon --show ou cat /proc/swaps ou free -m pour vérifier si le swap est bien activé.

  • # Edit

    Posté par . Évalué à 1 (+0/-0).

    Ah, il y a un mieux. J'ai fait un swapon /var/swap et redémarré Rpi-monitor et j'ai affiché dans Rpi-monitor : Used: 0B (0.00%) Free: 500.00MB Total: 500.00MB et pour htop 0K/500MB.

    J'imagine donc que la bonne commande pour redémarrer le swap est swapon /var/swap , mais est-ce la bonne commande à faire ? Puisque swapon -a semblait inopérant.

    • [^] # swapfile vs swap partition

      Posté par . Évalué à 6 (+5/-0).

      Par défaut sous Raspbian, le swap n'utilise pas une partition dédiée mais un fichier (/var/swap).

      Du coup la commande utilisée pour le tripoter n'est plus swapon mais dphys-swapfile.

      Pour désactiver proprement ton swapfile tu dois donc faire

      sudo dphys-swapfile swapoff

      puis pour le réactiver

      sudo dphys-swapfile swapon

      • [^] # Re: swapfile vs swap partition

        Posté par . Évalué à 1 (+0/-0).

        D'accord, merci!

      • [^] # Re: swapfile vs swap partition

        Posté par (page perso) . Évalué à 2 (+0/-0).

        Ça veut donc dire que /var/swap n'est pas dans /etc/fstab ?

        • [^] # Re: swapfile vs swap partition

          Posté par . Évalué à 1 (+0/-0).

          Ça veut donc dire que /var/swap n'est pas dans /etc/fstab ?

          Voilà ce que j'ai dans /etc/fstab :

          proc            /proc           proc    defaults          0       0
          PARTUUID=33204609-01  /boot           vfat    defaults          0       2
          PARTUUID=33204609-02  /               ext4    defaults,noatime  0       1
          UUID="5a9ca707-581a-4bac-b2bb-84ff94697ad8" /media/storage ext4 defaults,nofail 0 0
          # a swapfile is not a swap partition, no line here
          #   use  dphys-swapfile swap[on|off]  for that
          
          • [^] # Re: swapfile vs swap partition

            Posté par (page perso) . Évalué à 3 (+2/-0).

            Je crois que les deux dernières lignes (commentaires) expliquent pourquoi swapoff -a fonctionne bien pour désactiver la swap (elle est activée par un outil particulier, plutôt que via des éléments de configuration dans /etc/fstab) et pourquoi swapon -a ne fait rien : il n'y a pas d'entrée de swap configurée dans ce fichier.

            Debian Consultant @ DEBAMAX

            • [^] # Re: swapfile vs swap partition

              Posté par (page perso) . Évalué à 2 (+0/-0).

              C'est tout de même curieux qu'une distribution refuse explicitement de mettre la bonne entrée dans /etc/fstab.
              Ce n'est pas standard et ça oblige à connaître une subtilité (donc à perdre du temps, etc).

              • [^] # Re: swapfile vs swap partition

                Posté par . Évalué à 2 (+1/-0). Dernière modification le 21/06/19 à 09:56.

                Pourtant dphys-swapfile fait partie depuis fort longtemps de plusieurs petites distribs "qui montent" comme Debian ou Ubuntu ;-)

                Concernant son usage par défaut dans Raspbian il me paraît tout à fait justifié…

                Raspbian est une distribution qui est commune à toutes les versions de Raspberry Pi, depuis le 1A original doté d'un CPU 700MHz mono-cœur et de 256 Mo de RAM jusqu'au dernier 3B+ avec un CPU quadruple cœur à 1400 MHz et 1 Go de RAM. Des machines très différentes donc en termes de puissance.

                Niveau support de boot, on est par défaut sur de la carte SD pour le 1A ou sur de la microSD (voire de l'USB ou de l'ethernet) pour les modèles plus récents. Le tout avec des capacités très variables pouvant aller de 4 Go (minimum recommandé pour une Raspbian Lite) jusqu'à tout plein de To pour un disque branché en USB…

                Raspbian lui-même est fourni sous forme d'image "presque live" à flasher sur une SD ou une clé USB de taille presque quelconque.

                Comment dans ces conditions utiliser une partition de swap à l'ancienne ?
                De quelle taille ?
                Située où sur la SD ?
                Si la partition est située sur un autre support (genre HD en USB) que celui ayant servi à booter le Raspi (genre SD), ce support est-il déjà monté ? (race condition)

                Autant de questions qui trouvent une réponse élégante avec dphys-swapfile qui crée un espace de swap lors du boot (script init.d exécuté après le montage des disques), avec une taille par défaut qui correspond à 2 fois la RAM avec un maximum de 2 Go.

                Après, si tu configures ton Raspi de manière à booter sur un disque externe en USB, rien ne t'empêche d'utiliser plutôt un swap classique évidemment. Ou de désactiver totalement le swap. Ou encore d'utiliser un swap ZRAM.

                • [^] # Re: swapfile vs swap partition

                  Posté par . Évalué à 1 (+0/-0).

                  Après, si tu configures ton Raspi de manière à booter sur un disque externe en USB, rien ne t'empêche d'utiliser plutôt un swap classique évidemment. Ou de désactiver totalement le swap. Ou encore d'utiliser un swap ZRAM.

                  Auparavant j'avais transféré tout le système sur un hdd attaché au Pi, avec une partition swap sur ce même hdd, pour ne garder que le boot sur la carte SD. J'ai fait une nouvelle installation propre il y a une semaine et cette fois je laisse tout sur la carte SD avec un hdd comme /media. Car j'avais eu des problèmes d'installation d'applications quand le système était sur le hdd.

                  En plus en laissant tout sur la carte SD, il me suffit de la dupliquer sur une autre et en cas de problème de simplement changer la carte, ce qui est pratique et rapide.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.