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
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
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.