Limiter l'utilisation de la RAM dans Chrome?

22

Lorsque je laisse plusieurs onglets ouverts dans Google Chrome pendant des heures / jours, je remarque que certaines pages finissent par utiliser d'énormes quantités de RAM, au point où l'ensemble du système d'exploitation (XP) ne répond plus en raison de la pagination. Quand j'ai de la chance, je peux enfin mettre en signet la liste des URL ouvertes, fermer Chrome et recommencer; Lorsque je ne le suis pas, je dois simplement tuer Chrome et espérer pouvoir récupérer la liste des URL ouvertes.

  • Pourquoi donc? Des fuites de mémoire dans les plug-ins?
  • Existe-t-il un moyen de configurer Chrome de sorte qu'un seul onglet / page n'utilise pas plus qu'une quantité définie de RAM?

Merci.

OverTheRainbow
la source
combien de RAM avez-vous?
Baarn
@OverTheRainbow - Pourquoi ne pas envisager le rappel de
PeanutsMonkey
J'ai 4 Go, ce qui est suffisant, sauf lorsque certaines pages Web finissent par saisir 500 Mo. Merci pour les liens sur Page Snooze et Session Buddy.
OverTheRainbow

Réponses:

-2

Je pense que vous devriez simplement choisir d'acheter autant de RAM que votre système d'exploitation peut gérer. Vous ne devez pas limiter l'utilisation de la RAM de Chrome, car cela ne fera que ruiner votre expérience de navigation sur le Web. En supposant que vous utilisez votre ordinateur pour surfer sur Internet la plupart du temps, vous devez laisser Chrome obtenir toutes les ressources dont il a besoin afin de fournir les performances que vous souhaitez pour que vous puissiez "profiter" de l'exécution de ces onglets en même temps.

Je ne pense pas qu'il existe un moyen de limiter l'utilisation de la RAM de chaque onglet, mais vous pouvez limiter complètement l'utilisation de Chrome. Regardez ici:

/programming/192876/set-windows-process-or-user-memory-limit

Je préférerais ne pas faire ça, si j'étais toi, si je veux surfer sur le web en douceur.

WikiWitz
la source
16
Ce n'est pas vraiment une solution lorsque vous ne contrôlez pas le contenu de l'ordinateur que vous utilisez (c'est-à-dire l'ordinateur de travail)
Gnoupi
dans ce cas, ce serait bien s'il y avait un moyen de définir des «priorités» pour les onglets sélectionnés (comme l'onglet actif obtient la plus grande partie de la mémoire) car avec une RAM limitée et avec un ordinateur que vous ne possédez pas, l'utilisateur est celui qui devrait s'adapter (en réduisant le nombre d'onglets ouverts) ce qui est contre-productif.
WikiWitz
4
Chrome consomme autant de RAM que possible, donc ajouter plus de RAM équivaut à mettre plus de bois dans le feu, il brûle plus.
JDuarteDJ
5
@WikiWitz, vous sous-estimez la quantité de RAM consommée par Chrome. J'ai 16 Go de RAM physique et ce n'est toujours pas suffisant.
Pacerier
2
« En supposant que vous utilisez votre ordinateur pour surfer sur Internet la plupart du temps » - qui est un grand cul-um-ption. Tout n'est pas un Chromebook.
Piskvor
12
  1. J'ai écrit un programme Python 2.5 qui tue les moteurs de rendu de chrome lorsqu'ils utilisent une quantité de mémoire définie. Je lance ce programme sous watch. (notez qu'il utilise le module psutil qui n'est pas inclus avec Python.)

    import sys, os, psutil
    
    if len(sys.argv) == 2:
        try:
            limit = int(sys.argv[1])
        except:
            limit = 200 # default 200MB
    else:
        limit = 200
    
    uid = os.getuid()
    for p in psutil.get_process_list():
        try:
            if (p.name == 'chrome' and any('type=renderer' in part for part in p.cmdline)
               and p.uid == uid):
                m = p.get_memory_info()
                #print p.pid,m, m.rss / 1024 / 1024, m.vms / 1024 / 1024
                if (m.rss / 1024 / 1024) > limit: # kill if rss is greater than limit
                    print 'Killed', p.pid
                    p.kill()
        except psutil.error.NoSuchProcess:
            pass
        except psutil.error.AccessDenied:
            pass
    
  2. Je compte sur Session Buddy pour récupérer les onglets ouverts lorsque Chrome ne parvient pas à les restaurer.

Dan D.
la source
Comment Chrome gère-t-il la suppression des moteurs de rendu? Quel comportement l'onglet présente-t-il après la suppression de son moteur de rendu? Oh, je viens de voir votre commentaire Session Buddy, ce qui signifie que Chrome ne parvient pas à les restaurer parfois, d'accord. Cela arrive-t-il souvent? C'est vraiment bien, merci!
Matthew
1
@Human Les onglets qui ont utilisé le processus de rendu qui a été tué deviennent des onglets bloqués. Mais bien que le script ci-dessus fonctionne bien avec Chrome 12 dans les versions ultérieures, il tue également les extensions qui, contrairement à Chrome 12, sont exécutées dans des processus de rendu plutôt que dans des extensions.
Dan D.
@Human Il est possible de perdre les derniers onglets si vous ne cliquez pas sur restaurer . Même si vous disposez du Last Tabsfichier, il n'est pas possible de restaurer les onglets de ce fichier. J'ai essayé de déterminer le format et d'en extraire les URL depuis longtemps. Cela n'a pas réussi. Et j'ai plus confiance en SQLite qu'en le format binaire que Chrome utilise pour stocker les onglets de la session en cours, c'est pourquoi SB est meilleur.
Dan D.
@DanD., Ce script est-il sûr? Va-t-il finir par planter tout Chrome?
Pacerier
@Pacerier Oui, sauf lorsque Chrome est toujours dans sa phase de chargement d'onglet retardé après le redémarrage, ce n'est pas le cas.
Dan D.
4

La seule chose que j'ai vue à ce jour qui puisse le faire est d' exécuter du chrome dans un conteneur et de limiter la RAM des conteneurs .

Cependant, cela a quelques mises en garde majeures,

  • L'exécution de Chrome est compliquée par la configuration de dockerize et la séquence de lancement

  • d'une part, Chrome utilise déjà des conteneurs de noyau pour sandboxer ses threads; vous devez donc exécuter le conteneur avec une sorte de privilège root qui permet à cela de fonctionner. Cela peut être contourné, et le modèle de conteneur lié le fait. (il fait pratiquement tout ce dont il a besoin)

  • Vous perdrez presque certainement l'accélération du GPU

  • faire fonctionner l'audio est compliqué, mais géré dans le modèle de conteneur lié.

  • Quoi que vous pensiez de mal lorsque vous annulez votre garantie, Chrome n'aime pas violemment qu'on lui dise de ne pas utiliser plus de RAM, et agira en conséquence.

Mais cela fonctionne finalement.

Je suis plus intéressé à appliquer ces limites de RAM aux applications Electron Shell qui n'ont pas d'images Docker prédéfinies pour les classer pour vous.


Hors sujet mais je tiens à noter que Firefox se comporte très bien sur un matériel limité, mais je ne considère pas cela comme une vraie réponse.

ThorSummoner
la source
Je mettre à jour cette réponse en dire plus sur la façon dont les conteneurs sont juste une interface cgroup, vous pouvez utiliser cgroups vous pour accomplir la même
ThorSummoner
1

Ce n'est pas nécessairement un plugin. Notez que les pages Web ne sont plus statiques. Certaines pages Web ont juste une quantité non négligeable d'activité asynchrone en cours. Ajoutez l'activité des plug-ins et vous obtenez des inconnues.

Le meilleur remède que j'ai trouvé est de tuer la page Web et de la recharger. AFAIK, il n'y a aucun moyen de limiter la quantité de RAM qu'une page Web utilise.

surfasb
la source
1

Utilisez l'extension TabsOutliner - cela vous donnera un moyen facile de "fermer" les onglets sans les supprimer de votre contexte et de la liste de sessions en cours. Très utile.

Extension Tabs Outliner

omnray
la source
0

Tuez le processus de tabulation qui utilise la grande quantité de mémoire (je remarque que tout ce qui a tendance à utiliser Flash a tendance à utiliser 500 Mo +). Vous pouvez simplement recharger les onglets morts plus tard lorsque vous souhaitez reprendre leur travail.

Bigbio2002
la source
0

TabMemFree suspendra automatiquement les onglets inactifs. Vous pouvez déterminer combien de temps il suspend les onglets inactifs, avec un minimum de 15 minutes. Vous pouvez également lui demander d'ignorer les onglets épinglés.

Tab Wrangler est une autre extension à considérer qui suspend automatiquement les onglets inactifs si vous recherchez un peu plus de contrôle. Comme TabMemFree, vous pouvez déterminer la durée avant qu'un onglet soit considéré comme inactif et le paramétrer pour ignorer les onglets épinglés, mais vous avez la possibilité supplémentaire de verrouiller des onglets supplémentaires et de synchroniser vos paramètres d'onglet entre différents ordinateurs.

Daniel
la source