Ograniczasz użycie pamięci RAM w Chrome?

22

Gdy zostawiam otwartych kilka kart w Google Chrome przez wiele godzin / dni, zauważam, że niektóre strony używają ogromnej ilości pamięci RAM, do tego stopnia, że ​​cały system operacyjny (XP) przestaje odpowiadać z powodu stronicowania. Kiedy będę miał szczęście, mogę w końcu dodać do zakładek listę otwartych adresów URL, zamknąć Chrome i zacząć od nowa; Gdy nie jestem, po prostu muszę zabić Chrome i mam nadzieję, że odzyskam listę otwartych adresów URL.

  • Dlaczego? Wycieki pamięci we wtyczkach?
  • Czy istnieje sposób na skonfigurowanie Chrome, aby pojedyncza karta / strona nie używała więcej niż określonej ilości pamięci RAM?

Dziękuję Ci.

Nad tęczą
źródło
ile masz pamięci RAM?
Baarn
@OverTheRainbow - Dlaczego nie rozważyć Page
Dnooze
Mam 4 GB, co wystarcza, z wyjątkiem sytuacji, gdy niektóre strony kończą pobieranie 500 MB. Dzięki za linki na stronie Drzemka i Buddy w sesji.
OverTheRainbow

Odpowiedzi:

-2

Myślę, że powinieneś po prostu kupić tyle pamięci RAM, ile Twój system operacyjny może obsłużyć. Nie powinieneś ograniczać użycia pamięci RAM Chrome, ponieważ tylko zepsuło to surfowanie po Internecie. Zakładając, że najczęściej używasz komputera do surfowania po Internecie, powinieneś pozwolić Chrome uzyskać wszystkie zasoby, których potrzebuje, aby zapewnić wydajność, jakiej chcesz, aby „cieszyć się” jednoczesnym uruchamianiem tych kart.

Nie sądzę, że istnieje sposób na ograniczenie użycia pamięci RAM każdej karty, ale możesz całkowicie ograniczyć użycie Chrome. Popatrz tutaj:

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

Wolałbym tego nie robić, gdybym był tobą, jeśli chcę płynnego surfowania po Internecie.

WikiWitz
źródło
16
To nie jest tak naprawdę rozwiązanie, gdy nie masz kontroli nad zawartością komputera, którego używasz (tj. Komputera służbowego)
Gnoupi,
w takim przypadku dobrze byłoby, gdyby istniał sposób na ustawienie „priorytetów” dla wybranych kart (tak jak karta aktywna zajmuje najwięcej pamięci), ponieważ przy ograniczonej pamięci RAM i na komputerze, którego nie posiadasz, użytkownik jest tym, który powinien się dostosować (poprzez zmniejszenie liczby otwartych zakładek), co przynosi efekt przeciwny do zamierzonego.
WikiWitz,
4
Chrome zjada tyle pamięci RAM, ile się dostaje, więc dodanie większej ilości pamięci RAM jest równoznaczne z włożeniem większej ilości drewna do ognia, pali się więcej.
JDuarteDJ
5
@WikiWitz, nie doceniasz ile pamięci RAM zjada Chrome. Mam 16 GB fizycznej pamięci RAM i to wciąż za mało.
Pacerier
2
„Zakładając, że najczęściej używasz komputera do surfowania w Internecie” - to bardzo ważna sprawa. Nie wszystko to Chromebook.
Piskvor
12
  1. Napisałem program w języku Python 2.5, który zabija renderery chrome, gdy używają one określonej ilości pamięci. Uruchamiam ten program pod watch. (zauważ, że używa modułu psutil , który nie jest dołączony do Pythona).

    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. Korzystam z Session Buddy, aby odzyskać otwarte karty, gdy chrome nie przywróci ich.

Dan D.
źródło
Jak Chrome radzi sobie z zabijaniem rendererów? Jakie zachowanie przejawia karta po zabiciu jej renderera? Och, właśnie widziałem Twój komentarz do Session Buddy, co oznacza, że ​​Chrome czasami nie przywraca ich, dobrze. Czy zdarza się to często? To jest naprawdę fajne, dzięki!
Matthew
1
@Human Zakładki, które wykorzystały ten proces renderowania, który został zabity, stają się zawieszonymi zakładkami. Ale chociaż powyższy skrypt działa dobrze z Chrome 12 w późniejszych wersjach, zabija również rozszerzenia, które w przeciwieństwie do Chrome 12 są uruchamiane w procesach renderujących, a nie w rozszerzeniach.
Dan D.
@Human Istnieje możliwość utraty ostatnich kart, jeśli nie klikniesz przywróć . Nawet jeśli masz Last Tabsplik, nie można przywrócić kart z tego pliku. Próbowałem określić format i wyodrębnić z niego adresy URL już dawno temu. Nie powiodło się. I mam większe zaufanie do SQLite niż do formatu binarnego, którego Chrome używa do przechowywania kart bieżącej sesji, dlatego SB jest lepszy.
Dan D.
@DanD., Czy ten skrypt jest bezpieczny? Czy spowoduje to awarię całego Chrome?
Pacerier
@Pacerier Tak, z wyjątkiem sytuacji, gdy Chrome po ponownym uruchomieniu nadal znajduje się w fazie opóźnionego ładowania kart.
Dan D.
4

Jedyną rzeczą, jaką widziałem do tej pory, jest uruchomienie chrome wewnątrz kontenera i ograniczenie pamięci RAM kontenerów .

Ma to jednak pewne poważne zastrzeżenia,

  • Uruchamianie chrome komplikuje konfiguracja dokowania i sekwencja uruchamiania

  • po pierwsze, Chrome używa już pojemników jądra do piaskownicy swoich wątków; więc musisz uruchomić kontener z rodzajem uprawnień roota, który pozwala mu działać. Można to obejść i robi to połączony model kontenera. (robi praktycznie wszystko, czego potrzebuje)

  • Prawie na pewno stracisz przyspieszenie GPU

  • uruchomienie audio jest skomplikowane, ale obsługiwane w modelu połączonego kontenera.

  • Bez względu na wszystko, co może się nie powieść, gdy unieważnisz gwarancję, Chrome brutalnie nie lubi, aby nie używać więcej pamięci RAM, i odpowiednio zareaguje i napadnie furia.

Ale ostatecznie działa.

Bardziej interesuje mnie zastosowanie tych limitów pamięci RAM do aplikacji Electron Shell, które nie mają wstępnie zbudowanych obrazów dokerów, które mogłyby je rozdzielić.


Nie na temat, ale chcę zauważyć, że Firefox zachowuje się bardzo dobrze na ograniczonym sprzęcie, ale nie uważam tego za prawdziwą odpowiedź.

ThorSummoner
źródło
Powinienem zaktualizować tę odpowiedź, aby powiedzieć więcej o tym, jak kontenery są tylko interfejsem cgroup, możesz użyć cgroups do osiągnięcia tego samego
ThorSummoner
1

To niekoniecznie wtyczka. Pamiętaj, że strony internetowe nie są już statyczne. Niektóre strony mają po prostu mało trywialną aktywność asynchroniczną. Dodaj aktywność z wtyczek, a otrzymasz kilka niewiadomych.

Najlepszym rozwiązaniem, jakie znalazłem, jest zabicie strony i jej ponowne załadowanie. AFAIK, nie ma sposobu na ograniczenie ilości pamięci RAM używanej przez stronę internetową.

surfasb
źródło
1

Użyj rozszerzenia TabsOutliner - da ci to łatwy sposób na „zamknięcie” kart bez faktycznego usuwania ich z kontekstu i bieżącej listy sesji. Bardzo przydatne.

Rozszerzenie Outliner na zakładki

omnray
źródło
0

Zabij proces tabulatora, który zużywa dużą ilość pamięci (zauważam, że wszystko, co ma Flash, ma tendencję do używania 500 MB +). Możesz po prostu ponownie załadować martwe karty później, gdy chcesz wznowić pracę w nich.

Bigbio2002
źródło
0

TabMemFree automatycznie zawiesi nieaktywne karty. Możesz określić czas, po którym zawiesi nieaktywne karty, co najmniej 15 minut. Możesz także poinstruować go o ignorowaniu przypiętych kart.

Tab Wrangler to kolejne rozszerzenie do rozważenia, które automatycznie zawiesza nieaktywne karty, jeśli szukasz nieco większej kontroli. Podobnie jak TabMemFree, możesz określić czas, po którym karta zostanie uznana za nieaktywną, i ustawić ignorowanie przypiętych kart, ale masz dodatkową opcję blokowania dodatkowych kart i synchronizowania ustawień kart między różnymi komputerami.

Daniel
źródło