RAM-Nutzung in Chrome begrenzen?

RAM-Nutzung in Chrome begrenzen?

Wenn ich mehrere Tabs in Google Chrome stunden- oder tagelang geöffnet lasse, stelle ich fest, dass einige Seiten riesige Mengen an RAM verbrauchen, bis zu dem Punkt, an dem das gesamte Betriebssystem (XP) aufgrund der Seitenumbrüche nicht mehr reagiert. Wenn ich Glück habe, kann ich die Liste der geöffneten URLs endlich als Lesezeichen speichern, Chrome schließen und neu starten. Wenn nicht, muss ich Chrome einfach beenden und hoffen, dass ich die Liste der geöffneten URLs wiederherstellen kann.

  • Warum ist das so? Speicherlecks in Plug-Ins?
  • Gibt es eine Möglichkeit, Chrome so zu konfigurieren, dass ein einzelner Tab/eine einzelne Seite nicht mehr als eine festgelegte Menge an RAM verwendet?

Danke schön.

Antwort1

Ich denke, Sie sollten sich einfach dafür entscheiden, so viel RAM zu kaufen, wie Ihr Betriebssystem verarbeiten kann. Sie sollten die RAM-Nutzung von Chrome nicht einschränken, da dies Ihr Surferlebnis im Internet ruinieren würde. Vorausgesetzt, Sie verwenden Ihren Computer die meiste Zeit zum Surfen im Internet, sollten Sie Chrome alle Ressourcen zur Verfügung stellen, die es braucht, um die gewünschte Leistung zu liefern, damit Sie die Tabs gleichzeitig „genießen“ können.

Ich glaube nicht, dass es eine Möglichkeit gibt, die RAM-Nutzung jedes einzelnen Tabs zu begrenzen, aber Sie können die Nutzung von Chrome insgesamt begrenzen. Schauen Sie hier:

https://stackoverflow.com/questions/192876/set-windows-process-or-user-memory-limit

Wenn ich an deiner Stelle störungsfrei im Internet surfen möchte, würde ich das lieber nicht tun.

Antwort2

  1. Ich habe ein Python 2.5-Programm geschrieben, das die Renderer von Chrome beendet, wenn sie eine bestimmte Speichermenge überschreiten. Ich führe dieses Programm unter aus watch. (Beachten Sie, dass es diepsutilModul, das nicht in Python enthalten ist.)

    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. Ich verlasse mich aufSitzungspartnerum die geöffneten Tabs wiederherzustellen, wenn die Wiederherstellung durch Chrome fehlschlägt.

Antwort3

Das einzige, was ich bisher gesehen habe, das dies kann, istFühren Sie Chrome in einem Container ausUndBegrenzen Sie den RAM des Containers.

Allerdings gibt es einige wichtige Einschränkungen,

  • Das Ausführen von Chrome wird durch die Dockerize-Setup- und Startsequenz erschwert

  • Zum einen verwendet Chrome bereits Kernel-Container, um seine Threads in einer Sandbox auszuführen. Sie müssen den Container also mit einer Art Root-Berechtigung ausführen, damit dies funktioniert. Dies kann umgangen werden, und das verknüpfte Containermodell tut dies. (Es tut praktisch alles, was es tun muss.)

  • Sie werden mit ziemlicher Sicherheit die GPU-Beschleunigung verlieren

  • Die Funktionsfähigkeit von Audio ist kompliziert, wird aber im verknüpften Containermodell gehandhabt.

  • Was auch immer sonst noch schiefgehen könnte, wenn Ihre Garantie erlischt, Chrome lässt sich überhaupt nicht gerne sagen, dass es nicht mehr RAM verwenden darf, und reagiert dementsprechend sauer und bekommt einen Wutanfall.

Aber letztendlich funktioniert es.

Ich bin mehr daran interessiert, diese RAM-Grenzen auf Electron Shell-Apps anzuwenden, die keine vorgefertigten Docker-Images haben, um sie für Sie zu organisieren.


Abseits des Themas möchte ich anmerken, dass Firefox auf eingeschränkter Hardware sehr gut läuft, ich halte das jedoch nicht für eine wirkliche Antwort.

Antwort4

Es muss nicht unbedingt am Plug-In liegen. Beachten Sie, dass Webseiten nicht mehr statisch sind. Auf manchen Webseiten findet einfach eine nicht unerhebliche Menge asynchroner Aktivität statt. Wenn man die Aktivität der Plug-Ins hinzuzählt, erhält man einige Unbekannte.

Das beste Mittel, das ich gefunden habe, ist, die Webseite zu beenden und neu zu laden. Soweit ich weiß, gibt es keine Möglichkeit, die RAM-Menge zu begrenzen, die eine Webseite nutzt.

verwandte Informationen