Forum Linux.général Probleme de cache et de swap

Posté par  .
Étiquettes : aucune
0
29
nov.
2010
Salut,
J'ai un comportement très bizarre sur certains de mes serveurs.
Le cache se rempli progressivement jusqu'à occuper toute la ram libre. Jusque là c'est un peu intrigant mais pas forcement anormal.
Là ou je ne comprends pas c'est que lorsque le cache est arrivé à 'manger' toute la ram et que beaucoup de process sont créés alors le système ne vide pas le cache pour faire de la place, ou pas complètement, mais utilise de la swap.
Par exemple sur un système avec 16 GB, j'ai 4 GB de mémoire utilisée par les process, 12 GB de cache et le système commence à swaper au lieu de taper dans le cache. Lorsque le nombre de process redescend à ~200 la swap se vide tout doucement et au final j'ai 500 MB de mémoire utilisée et 15,5 GB de cache.
J'essaye de jouer avec la swapiness et de vider le cache et ça a l'air de donner de bons résultats mais ce comportement anormal m'intrigue et ça reste un workaround pour maintenant mon serveur running.
Comment je peux voir ce que contient le cache ?
  • # contenu du cache => en partie les gestions de fichiers ouverts et autres

    Posté par  . Évalué à 2.

    de memoire, tu dois pouvoir forcer à syncrhoniser plus souvent le cache et les disques

    swapiness, c'est pour lui dire d'utiliser plus ou moins souvent le swap (exemple swapiness 0, ca voudrait dire essayer de ne jamais swapper)

    il doit y avoir la meme chose pour le cache.

    et ca se positionne grace à sysctl qui peut etre reglé pour se lancer au demarrage de la machine (pour eviter de le faire à chaque fois).
    • [^] # Re: contenu du cache => en partie les gestions de fichiers ouverts et au

      Posté par  . Évalué à 5.

      de memoire, tu dois pouvoir forcer à syncrhoniser plus souvent le cache et les disques

      Pour le commit des pages dirty sur disque, ça se modifie avec les sysctl vm.diry_ratio et vm.dirty_background_ratio.


      J'essaye de jouer avec la swapiness et de vider le cache et ça a l'air de donner de bons résultats mais ce comportement anormal m'intrigue et ça reste un workaround pour maintenant mon serveur running.

      C'est un comportement normal, après cela dépend de chaque cas d'utilisation. Si le noyau les swap, c'est que les pages ne sont pas utilisées souvent (algorithme de type LRU), donc autant utiliser la mémoire pour le page cache, c'est meilleur pour les performances. Là où ce genre de comportement pose problème, c'est pour des desktops, parce que l'interactivité en prend un coup (devoir re-charger OOO et firefox à cause d'un updatedb en background, c'est pas sympa).

      Donc je te dirais que tu devrais laisser en l'état, sauf si tu as une bonne raison de changer le comportement par défaut.
      Dans ce cas, tu pourrais abaisser la swappiness à 40 par exemple, avec diry_ratio à 10 et dirty_background_ratio à 5 (voire moins, mais trop bas c'est mauvais pour les performances).
  • # « Normal » je pense

    Posté par  . Évalué à 5.

    C'est normal je pense. Moi aussi au départ je trouvais ça bizarre, et les heuristiques derrière cette gestion semblent étranges. Mais j'ai réfléchi, et je me suis dit que c'est pas forcément bête : (attention, c'est ma réflexion basée sur mon expérience, rien d'officiel) imagine que t'as du cache qui est souvent accédé, alors que de la mémoire utilisée par certaines applications ne l'est que très peu. Si les conditions pour mettre en swap sont du genre LRU, c'est à la mémoire de l'appli de partir en swap plutôt qu'au cache de dégager pour libérer de la mémoire. Ainsi, tes applis qui utilisent beaucoup de données sur disque, et donc beaucoup de cache, ne sont pas à l'étroit à cause d'une appli qui consomme beaucoup de mémoire mais qui ne l'utilise que très peu souvent. Ça amériore ainsi les perfs de l'appli qui utilise beaucoup de données sur le disque.
    • [^] # Re: « Normal » je pense

      Posté par  (site web personnel) . Évalué à 2.

      Dans le même ordre d'idées : est-ce que le fait que certaines applications soient swappées est un problème ? Est-ce que tu constates des ralentissements dans ta charge de travail normale ? Tu dis que quand tu es en charge, l'utilisation de la mémoire atteint les 4Go, tu as donc largement de la marge pour faire un swapoff. Est-ce que tu constates un changement dans les performances dans ce cas ?
  • # Solution définitive

    Posté par  . Évalué à 6.

    Bien souvent on a moins de 512 Mo de swap (sinon ça rame à mort si c'est utilisé). Sur une machine avec 16 Go de mémoire tu peux tout simplement désactiver le swap. Tu ne verras aucune différence dans le sens négatif du terme.
    • [^] # Re: Solution définitive

      Posté par  . Évalué à 1.

      Il ne faut jamais désactivr le swap à la légère. Bien souvent racconter ce genre de cose sans avoir examiné de près ce que fait la machine est risqué.

      Avant de désactiver le swap, je ferais des mesures de perf, et je le réduirais petit à petit.
      • [^] # Re: Solution définitive

        Posté par  . Évalué à 3.

        perso j'ai viré le swap sur mes machines perso qui ont 4Go de RAM

        j'ai viré le swap sur les machines virtuelles, quitte à doubler la RAM allouées pour limiter les acces disques sur la machine physique.
        • [^] # Re: Solution définitive

          Posté par  . Évalué à 2.

          Je ne dis pas que c'est une mauvaise idée, je dis juste qu'il faut le faire avec prudence.
    • [^] # Re: Solution définitive

      Posté par  (site web personnel) . Évalué à 2.

      Hum sinon, il on peut patcher les applications qui ont besoin d'avoir leur mémoire en RAM pour utiliser mlock(). C'est sans doute pas une bonne idée en générale mais ça permet d'avoir un contrôle plus fin.

      pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

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