Limitare l'uso della RAM in Chrome?


22

Quando si lasciano aperte diverse schede in Google Chrome per ore / giorni, noto che alcune pagine finiscono per usare enormi quantità di RAM, al punto in cui l'intero sistema operativo (XP) non risponde a causa del paging. Quando sono fortunato, posso finalmente aggiungere un segnalibro all'elenco di URL aperti, chiudere Chrome e ricominciare; Quando non lo sono, devo semplicemente uccidere Chrome e spero di poter recuperare l'elenco di URL aperti.

  • Perché? Perdite di memoria nei plug-in?
  • Esiste un modo per configurare Chrome in modo che una singola scheda / pagina non utilizzi più di una determinata quantità di RAM?

Grazie.


quanta RAM hai?
Baarn,

@OverTheRainbow - Perché non considerare Page Snooze - chrome.google.com/webstore/detail/…
PeanutsMonkey

Ho 4 GB, che è sufficiente tranne quando alcune pagine Web finiscono per catturare 500 MB. Grazie per i collegamenti su Page Snooze e Session Buddy.
OverTheRainbow,

Risposte:


-2

Penso che dovresti semplicemente optare per l'acquisto di tutta la RAM che il tuo sistema operativo è in grado di gestire. Non dovresti limitare l'utilizzo della RAM di Chrome perché rovinerà la tua esperienza di navigazione sul Web. Supponendo che utilizzi il tuo computer per navigare in Internet per la maggior parte del tempo, dovresti consentire a Chrome di ottenere tutte le risorse di cui ha bisogno per offrire le prestazioni che desideri per "divertirti" eseguendo quelle schede contemporaneamente.

Non penso che ci sia un modo per limitare l'utilizzo della RAM di ogni singola scheda, ma puoi limitare del tutto l'utilizzo di Chrome. Guarda qui:

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

Preferirei non farlo, se fossi in te, se voglio una navigazione fluida sul web.


16
Questa non è davvero una soluzione quando non hai il controllo sul contenuto del computer che stai utilizzando (ovvero computer di lavoro)
Gnoupi

in quel caso sarebbe bene se ci fosse un modo per impostare le "priorità" sulle schede selezionate (come la scheda attiva ottiene la maggior parte della memoria) poiché con RAM limitata e con un computer di cui non sei il proprietario l'utente è quello che dovrebbe adattarsi (riducendo il numero di schede aperte) che è controproducente.
WikiWitz,

4
Chrome consuma più RAM che può, quindi aggiungere più RAM equivale a mettere più legna nel fuoco, brucia di più.
JDuarteDJ,

5
@WikiWitz, stai sottovalutando la quantità di RAM di Chrome che mangia. Sto avendo 16 GB di RAM fisica e non è ancora abbastanza.
Pacerier,

2
"Supponendo che tu usi il tuo computer per navigare in Internet per la maggior parte del tempo", questa è una delle principali affermazioni. Non tutto è un Chromebook.
Piskvor,

12
  1. Ho scritto un programma Python 2.5 che uccide i renderer di Chrome quando usano su una determinata quantità di memoria. Eseguo questo programma sotto watch. (nota che usa il modulo psutil che non è incluso con 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. Mi affido a Session Buddy per recuperare le schede aperte quando Chrome non riesce a ripristinarle.


In che modo Chrome gestisce i renderer che vengono uccisi? Che comportamento presenta la scheda dopo che il suo renderer è stato ucciso? Oh, ho appena visto il tuo commento su Session Buddy, quindi a volte Chrome non riesce a ripristinarli, okay. Succede spesso? Questo è davvero pulito, grazie!
Matteo,

1
@Human Le schede che hanno utilizzato quel processo di rendering che è stato ucciso diventano schede bloccate. Ma sebbene lo script sopra funzioni bene con Chrome 12 nelle versioni successive, uccide anche le estensioni che a differenza di Chrome 12 vengono eseguite nei processi di rendering piuttosto che in quelle di estensione.
Dan D.

@Human È possibile perdere le ultime schede se non si fa clic su Ripristina . Inoltre, anche se si dispone del Last Tabsfile, non è possibile ripristinare le schede da quel file. Ho cercato di determinare il formato ed estrarre gli URL da esso una volta tanto tempo fa. Non ha avuto successo. E ho più fiducia in SQLite che nel formato binario utilizzato da Chrome per memorizzare le schede della sessione corrente, motivo per cui SB è migliore.
Dan D.

@DanD., Questo script è sicuro? Finirà per mandare in crash l'intero Chrome?
Pacerier,

@Pacerier Sì, tranne quando Chrome è ancora in fase di caricamento della scheda ritardata dopo il riavvio, non lo è.
Dan D.

4

L'unica cosa che ho visto fino ad oggi che può fare questo è eseguire Chrome all'interno di un contenitore e limitare la RAM dei contenitori .

Tuttavia, questo ha alcuni avvertimenti importanti,

  • L'esecuzione di Chrome è complicata dalla configurazione dockerize e dalla sequenza di avvio

  • per uno, Chrome utilizza già i contenitori del kernel per sandboxare i suoi thread; quindi devi eseguire il contenitore con una sorta di privilegio di root che gli consenta di funzionare. Questo può essere eluso e il modello di container collegato lo fa. (fa praticamente tutto ciò di cui ha bisogno)

  • Quasi certamente perderai l'accelerazione della gpu

  • far funzionare l'audio è complicato, ma gestito nel modello di contenitore collegato.

  • Qualunque altra cosa ti aspetti di andare storto quando annulli la garanzia, Chrome non detiene violentemente il fatto di non utilizzare più RAM e agirà di conseguenza.

Ma alla fine funziona.

Sono più interessato ad applicare questi limiti di ram alle app di Electron Shell che non hanno immagini docker predefinite per eseguirle.


Fuori tema ma voglio notare che Firefox si comporta molto bene su hardware limitato, ma non considero una vera risposta.


Dovrei aggiornare questa risposta per dire di più su come i contenitori siano solo un'interfaccia cgroup, puoi usare tu stesso cgroups per ottenere lo stesso risultato
ThorSummoner

1

Non è necessariamente un plugin. Si noti che le pagine Web non sono più statiche. Alcune pagine web hanno una quantità non banale di attività asincrona in corso. Aggiungi l'attività dai plug-in e avrai alcune incognite.

Il miglior rimedio che ho trovato è quello di uccidere la pagina web e ricaricarla. AFAIK, non è possibile limitare la quantità di RAM utilizzata da una pagina Web.


1

Usa l'estensione TabsOutliner: ti darà un modo semplice per "chiudere" le schede senza rimuoverle dal contesto e dall'elenco delle sessioni correnti. Molto utile.

Schede Outliner Extension


0

Elimina il processo di tabulazione che utilizza una grande quantità di memoria (noto che qualsiasi cosa con Flash tende a utilizzare 500 MB +). Puoi semplicemente ricaricare le schede morte più tardi quando vuoi riprendere a lavorarci.


0

TabMemFree sospenderà automaticamente le schede inattive. È possibile determinare quanto tempo prima che sospenda le schede inattive, con un minimo di 15 minuti. Puoi anche istruirlo su schede appuntate ignorate.

Tab Wrangler è un'altra estensione da considerare che sospende automaticamente le schede inattive se stai cercando un po 'più di controllo. Come TabMemFree, puoi determinare il periodo di tempo prima che una scheda venga considerata inattiva e impostarla per ignorare le schede appuntate, ma hai l'opzione aggiunta per bloccare altre schede e sincronizzare le impostazioni delle tue schede tra computer diversi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.