Forum Linux.général Mémoire saturée = activité disque

Posté par  . Licence CC By‑SA.
Étiquettes :
4
28
août
2014

Bonjour,

je laisse ma machine principale allumée en permanence.
Elle est équipée de 8 Gio de mémoire, et pas de swap.

La mémoire est utilisée de plus en plus au fil du temps, principalement à cause des fuites mémoire de Firefox. Environ deux fois par mois je sauvegarde la session courante Firefox, je tue Firefox, puis je le relance. J'ai alors 4 à 5 Gio de mémoire libérée (j'ai BEAUCOUP d'onglets ouverts. Actuellement 168 onglets dans 16 fenêtres Firefox).

Environ 2 fois par an la mémoire arrive à saturation sans que je sois présent, ou soudainement.
Le disque-dur se met en activité permanente. J'ai alors une fenêtre de quelques secondes pendant laquelle je peux agir et ensuite c'est fichu.
Le disque est en activité permanente, il gratte dans tous les sens. Je l'ai laissé une fois toute une nuit. Au matin rien n'avait changé.

La souris devient saccadée puis le curseur n'est plus du tout affiché. Le clavier ne donne rien en environnement graphique.
Aucune application n'est tuée automatiquement (et je ne peux pas le faire manuellement car pas possible d'agir sur le système).
Je peux passer sur les TTY et revenir à l'écran graphique, mais je ne peux pas ouvrir de session car l'invite pour le mot de passe n'a pas le temps d'apparaître avant l'expiration des 60 secondes allouées. Idem en ssh qui met 3 plombes à se connecter puis je me fais jeter pour cause de délai trop important lors de la saisie du mot de passe.
Bref, machine totalement inutilisable.

Donc je relance la machine un peu brutalement (Alt+Syst+b) et ensuite je regarde quels fichiers ont été écrits pendant ce temps.
Aucun ou presque.
Rien dans les logs. Rien dans la file d'attente Exim. Rien nulle part.

Alors c'est quoi cette activité disque ? Ça lit quoi de manière infinie ?

  • # Mémoire saturée = activité disque

    Posté par  . Évalué à 4.

    L'activité du disque ce serait pas lié au fait que les caches ont été purgés pour gagner de la mémoire, et du coup dés qu'il y a une action il faut aller lire les données sur le disque et ainsi de suite… je dis ça mais je ne suis pas sûr que ça puisse générer une activité continue sur une longue période.

    • [^] # Re: Mémoire saturée = activité disque

      Posté par  . Évalué à 2.

      J'ai déjà eu le temps de lancer htop et j'ai constaté que la mémoire disponible pour les caches est effectivement très réduite.

      Ton hypothèse est très plausible si un ou des logiciels font des accès disques en permanence. Ce qui est le cas de Firefox et de Ktorrent. Et peut-être d'autres de temps en temps.
      Sans cache, le moindre accès à un fichier génère une rafale d'accès au disque physique.
      Ça correspond aux symptômes.

    • [^] # Re: Mémoire saturée = activité disque

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

      Tu peux aussi essayer glances, un outil Python qui résume pleins d'infos sympa, dont les lectures/écritures sur le disque.

      Si tu le laisse allumer pour une session, tu pourrais voir quel programme provoque toute l'écriture/lecture qui fait tout ramer.

  • # about:memory

    Posté par  . Évalué à 5.

    Plutôt que de fermer/rouvrir Firefox, tu peux aller dans about:memory et faire un coup de GC/autre. Ce serait peut-être plus rapide.

    Y'a aussi peut-être une extension qui éviterait d'aller dans about:memory en permettant d'y accéder depuis la barre d'outils ou le menu contextuel.

    about:healthreport pourrait t'intéresser aussi.

    A part ça, de mon côté j'ai dans /etc/sysctl.d/swapiness.conf :

    vm.swappiness=0

    pour éviter au maximum que ça swap. Y'a 12 Go de RAM, jamais utilisé à plus de 50% (sans prendre en compte les caches), je vois pas pourquoi avec swapiness=60 (le truc par défaut) ça se met parfois à swaper et à ramer. Alors que perdre des caches ça fait juste perdre un peu de temps, sans rendre le système inutilisable.

    Bref, c'est à tester.

    Dans ta distrib, ce sera peut-être à mettre au démarrage pour tester (arguments pour le kernel dans /etc/default/grub, ligne "GRUB_CMDLINE_LINUX_DEFAULT" et ensuite il faut regénérer la config de grub), ou dans /etc/sysctl.conf

    "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

    • [^] # Re: about:memory

      Posté par  . Évalué à 3. Dernière modification le 28 août 2014 à 13:36.

      vm.swappiness=0

      pour éviter au maximum que ça swap.

      Ça c'est dans les noyaux plus vieux que 3.5 (inclus), dans les versions ultérieures, 0 désactive le swap (la mémoire vive est libérée par le OOM killer), la valeur de swappiness la plus basse est 1.

      On peut changer la valeur de swappiness à chaud avec sysctl -w vm.swappiness=0 ou echo 0 > /proc/sys/vm/swappiness

      Please do not feed the trolls

    • [^] # Re: about:memory

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

      Tu peux essayer de changer la valeur dirty_background_ratio.
      http://www.westnet.com/~gsmith/content/linux-pdflush.htm

      Tu peux aussi réduire adjust vm.vfs_cache_pressure.

      Je ne sais pas s'il est possible de limiter la taille que les caches peuvent prendre dans la RAM

      Mais l'idée est la même :
      Tu possèdes une grande quantité de mémoire vive, et un disque dur lent.
      Le noyau va cacher, et écrire sur le disque de temps en temps (toutes les 30 secondes ?), ou si dirty_background_ratio est dépassé.
      Cela permet de ne pas ralentir le PC la plupart du temps, mais si ton disque est trop lent par rapport à la quantité de RAM à écrire créée, et bien tu n'as pas le temps d'écrire tout ce qu'il faut, avant que la limite soit de nouveau atteinte, ce qui fait que tout va ramer, jusqu'à ce que le transfert soit terminé, s'il peut se terminer !

      Soit la taille des caches peut-être limitée à un certain pourcentage de la RAM, et donc ça fera moins de données à écrire sur le disque le temps venu.
      Soit tu écris sur le disque plus souvent (dirty_background_ratio plus bas), mais tu vas diminuer les performances de ton disque.

      • [^] # Re: about:memory

        Posté par  . Évalué à 2.

        Comme indiqué dans le post initial, il n'y a pas de swap.

        Si l'hypothèse de jacobus77 est la bonne, limiter la taille des tampons est l'exact inverse de ce qu'il faut faire :-)

  • # bourrin ?

    Posté par  . Évalué à 7.

    Environ deux fois par mois je sauvegarde la session courante Firefox, je tue Firefox, puis je le relance. J'ai alors 4 à 5 Gio de mémoire libérée

    tu peux pas juste activer l'option de reouvrir les onglets à l'ouverture du logiciel, puis fermer proprement firefox avant de le relancer ?

    tu as quelles versions de firefox ?

    (j'ai BEAUCOUP d'onglets ouverts. Actuellement 168 onglets dans 16 fenêtres Firefox).

    et tu t'en sors avec toutes ces "fenetres ouvertes" sur le monde ?

    non parce que j'ai toujours du mal à comprendre comment font les gens qui ont un nombre hallucinant d'onglets,
    à moins de zapper de l'un à l'autre, il suffit quand meme juste d'avoir les URL dans les marque-pages,
    d'ouvrir un nouvel onglet, et d'ouvrir le marque page qui va bien,
    quand on a finit la lecture, on referme l'onglet,
    ou on passe au marquepage d'apres.

    ca evite d'avoir 3500plugins flash/javascript qui se lancent pour afficher les pubs, les contenus des sites alors qu'ils sont en arriere plan.

    • [^] # Re: bourrin ?

      Posté par  . Évalué à 4.

      non parce que j'ai toujours du mal à comprendre comment font les gens qui ont un nombre hallucinant d'onglets,

      J'ai personnellement une quarantaine d'onglets ouverts actuellement.
      4 ou 5 sont épinglés et j'ai 5 groupes d'onglets (ayant chacun de 3 à 10 onglets). Pourquoi ne pas utiliser les marques pages ?

      1. L'important c'est le contexte et pas chacun des onglets. Je passe d'un thème à l'autre en passant d'un groupe à l'autre.
      2. Tout ceci est temporaire, je garde un groupe pendant quelques jours voir une semaine puis je bazarde. Nettoyer mes groupes d'onglets est très simple Ctrl+e et je supprime (ou je crée) des groupes simplement. Pour nettoyer sa base de marque page ça demande plus de rigueur.

      ca evite d'avoir 3500plugins flash/javascript qui se lancent pour afficher les pubs, les contenus des sites alors qu'ils sont en arriere plan.

      Soyons sérieux avec noscript et RequestPolicy, il est possible qu'il y ai moins de code js exécuté dans l'ensemble de mes onglets que sur la page d'accueil d'Orange.

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: bourrin ?

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

        Personnellement je peux comprendre que certains privilégient les onglets que les marques pages.
        Mais après, si je constate que ce comportement met à genoux ma machine, je change de méthode pour que cela ne se reproduise plus…

        • [^] # Re: bourrin ?

          Posté par  . Évalué à 3.

          Mais après, si je constate que ce comportement met à genoux ma machine, je change de méthode pour que cela ne se reproduise plus…

          Tout à fait, ça dépend de beaucoup de choses. Personnellement, j'éteins ma machine tous les soirs sauf de rare fois donc je n'ai pas tant de problème de mémoire que ça (là par exemple mon firefox mange 1.6 Gio et j'utilise "que" 4.5 Gio sur les 8 de la machine).

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: bourrin ?

          Posté par  . Évalué à 3.

          si je constate que ce comportement met à genoux ma machine, je change de méthode pour que cela ne se reproduise plus

          Le navigateur web est pour moi un outil de productivité très important. Donc 3 minutes perdues tous les 15 jours c'est sans problème.
          Ce qui me gêne c'est le plantage lorsque je n'ai pas fait attention à la mémoire depuis une semaine.

    • [^] # Re: bourrin ?

      Posté par  . Évalué à 2.

      tu peux pas juste activer l'option de reouvrir les onglets à l'ouverture du logiciel, puis fermer proprement firefox avant de le relancer ?

      C'est plus rapide de tuer la tâche avec xkill ou killall, car j'ai généralement plus de 15 fenêtres qu'il faut aller chercher sur les bons bureaux.
      J'enregistre la session avant, ce qui me prend probablement 5 secondes. En fait je n'en ai pas besoin car c'est fait automatiquement toutes les 30 secondes je crois avec mon paramétrage. Je vais d'ailleurs ne plus faire cette manipulation car finalement inutile.

      J'ai un bureau par activité.
      Perso
      pro productivité
      pro recherches
      Petits clients
      client xxx
      client yyy
      client zzz
      Dans chaque bureau j'ai une fenêtre Firefox par projet qui est sur le grill.
      Par exemple pour une mairie dont je m'occupe (elle a un bureau pour elle toute seule) j'ai un Firefox pour ma doc virtualisation (mon wiki) et diverses pages sur le sujet, car je suis en train de faire des tests pour un besoin particulier. Cette fenêtre restera ouverte probablement 2 semaines, le temps du projet. J'ai un Firefox avec des pages du forum OpenVPN car je discute d'un bug auquel je fais face dans cette mairie. J'ai un Firefox sur des logiciels de calculatrices Windows que les utilisateurs sont en train de tester (ce genre de test dure au minimum 3 ou 4 mois). Bref j'ai tout sous la main.

  • # oomkiller et swap

    Posté par  . Évalué à 5.

    Si il n'y a plus d'espace en ram pour le cache et les buffers, alors le système va écrire directement sur les disques. A partir de là les élements s'enchainent jusqu'a rendre le système instable.
    La question est de savoir pourquoi le oomkiller n'a pas tué ton firefox ?
    Quel version de kernel as-tu ? As-tu modifié quelque chose au niveau du oomkiller ?

    N'as tu pas moyen de faire une partition de swap ? Cela te donnerai au moins un peu plus de marge avant que le système ne plante.

  • # ff?

    Posté par  . Évalué à 0.

    non parce que j'ai toujours du mal à comprendre comment font les gens qui ont un nombre hallucinant d'onglets,

    C'est simple : il suffit d'avoir plusieurs projets a la fois, et dans chacun entre 5/10 onglets pour les ressources nécessaires, docs, tutos, etc
    Et le systeme des marques pages manque d'un gros truc: la sauvegarde de la page, tout le monde n'a pas de connexion permanente.

    PS pour l'auteur : 168 ca fait beaucoup. Jdois tourner autour de la soixantaine quotidiennement, pour en virer une quinzaine tous les jours sinon j'en serais a bien plus. Mais j'ai du lacher firefox pour ca qu'est plus que gourmand en mémoire, et me tourner vers Opera.

    Serieux, comment firefox survit a 168 onglets ouverts? sur ma machine c'est kill direct, impossible a gerer.

    Firefox n'est vraiment pas le navigo a prendre quand on gere un grand nombre de données.

    • [^] # Re: ff?

      Posté par  . Évalué à 2.

      Firefox gère très bien quelques centaines d'onglets.

      Moi j'ai juste pris l'habitude de fermer Firefox à chaque fois que je mets en veille ma machine, histoire d'accélérer la mise en veille, et de décharger les « anciens » onglets. Il réapparaissent tous au prochain lancement. Même avec plus de 250 onglets, mon Firefox utilise rarement plus de 1.2Go de mémoire, ce que je trouve tout à fait honnête (compte tenu de ma machine et de l'utilisation que j'en fais).

    • [^] # Re: ff?

      Posté par  . Évalué à 4.

      me tourner vers Opera.

      Ils sortent encore des versions linux ?

      Firefox n'est vraiment pas le navigo a prendre quand on gere un grand nombre de données.

      C'est pourtant le seul navigateur qui s'est doté d'une interface pour gérer les onglets à profusion grâce aux groupes d'onglets. Ça plus le déchargement et le chargement paresseux des onglets, c'est à mon humble avis l'un des navigateurs les mieux dotés qui soit pour faire ça.

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: ff?

        Posté par  . Évalué à 1.

        Là je ne suis qu'à moitié d'accord. Les anciennes versions d'Opera avaient le mérite de proposer une barre d'onglets verticale (je ne me souvient plus si c'était une vue hiérarchique). Heureusement que pour Firefox il existe l'extension Tree Style Tabs. Très très pratique. Mais qui incite à conserver beaucoup d'onglets.

        • [^] # Re: ff?

          Posté par  . Évalué à 3. Dernière modification le 28 août 2014 à 23:18.

          Personnellement je trouve que c'est plus proche du hack pour essayer d'afficher plus d'onglets que d'un vrai gain à ce niveau là. La seule chose qui me manque aujourd'hui dans firefox c'est de pouvoir gérer les groupes d'onglets au clavier.

          Avec Tree Style Tabs, j'ai vraiment l'impression de perdre plus d'espace et l'organisation hiérarchique est gênante je trouve (elle entre pas dans mon organisation). En fait je préfère avoir des groupes bien plus petits (pas plus de 10 ou 15 onglets) et mieux séparés (je ne vois que ce qui m'intéresse).

          Après firefox pourrait aller plus loin et gérer les onglets comme certains tilling WM (tu tag tes onglets pour qu'ils apparaissent dans un groupe d'onglets ou (non exclusif) un autre, tu peut afficher plusieurs groupes en même temps etc).

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

          • [^] # Re: ff?

            Posté par  . Évalué à 2.

            Après firefox pourrait aller plus loin et gérer les onglets comme certains tilling WM (tu tag tes onglets pour qu'ils apparaissent dans un groupe d'onglets ou (non exclusif) un autre, tu peut afficher plusieurs groupes en même temps etc).

            y a plus qu'à coder le addon qui va bien.

  • # Fermer Firefox ?

    Posté par  . Évalué à 3.

    je laisse ma machine principale allumée en permanence.

    Ça OK, ça peut servir. Par contre, pourquoi laisser Firefox ouvert quand tu n'es pas devant la machine pendant un laps de temps assez long ?

    Essayer de fermer Firefox, par exemple quand tu vas te coucher, tu n'y as pas pensé ?

    • [^] # Re: Fermer Firefox ?

      Posté par  . Évalué à 2. Dernière modification le 29 août 2014 à 00:16.

      Visiblement, il a une 15n de fenêtre pour caser 160 onglets et il joue avec xkill killall pour «fermer» firefox.

      Moi, la question que je me pose c'est pourquoi il n'utilise pas ctrl+E (panorama) avec un addon comme Tab Group Helper pour en simplifier la gestion. Même avec 350 onglets [1] c'est très simple et le redémarrage de FF se fait facilement.
      Pour le redémarrage, j'utilise restartless restart ça m'économise deux cliques.

      Note au passage, flashblock ou autre flash control est indispensable sur le vieux PC de ma compagne (Pentium E5200 @2.50GHz) la moindre pub peu bouffer les 2G de ram et la conso CPU assez rapidement. Ça correspond pas mal à ton soucis Kerro

      [1]:Ma compagne est accroc aux onglets en pagaille.

      • [^] # Re: Fermer Firefox ?

        Posté par  . Évalué à 2.

        Mon problème n'est pas la mémoire consommée, ni le redémarrage de Firefox, mais la machine qui devient inutilisable.
        J'ai déjà FlashBlock, ainsi que bien d'autres choses, pour limiter les intrusions commerciales.

        La mémoire consommée qui augmente au cours du temps, c'est un ensemble de fuites mémoire. On peut les ralentir, pas les éliminer. Et encore une fois, relancer Firefox tous les 15 jours ne me pose pas de problème.

        • [^] # Re: Fermer Firefox ?

          Posté par  . Évalué à 2.

          L'activité disque infinie a à mon avis, un lien plus ou moins étroit avec la mémoire consommée tes 8go de ram ne te protège pas des pages ou plugins foireux. S'il n'y a plus de place quel qu’en soit la raison faut quand même écrire les données quelque part et, ce ne sera pas sur la swap si tu n'en a pas.

          À chaque fois que j'ai rencontré un soucis de disque gratteur c'était à chaque fois un soucis avec le «plugin-container» le plus souvent à cause de pub flash merdeuse mais pas uniquement.

          Si tu ne l'a pas déjà fais, laisse un terminal avec top activé et/ou log régulièrement le résultat de ps auxf, quand tu auras a nouveau le soucis tu auras certainement une piste.

Suivre le flux des commentaires

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