Limitando o uso de RAM no Chrome?

22

Ao deixar várias guias abertas no Google Chrome por horas / dias, percebo que algumas páginas acabam usando grandes quantidades de RAM, a ponto de todo o sistema operacional (XP) deixar de responder devido à paginação. Quando tiver sorte, finalmente posso marcar a lista de URLs abertos, fechar o Chrome e começar de novo; Quando não estou, preciso simplesmente matar o Chrome e esperar recuperar a lista de URLs abertos.

  • Por que é que? Vazamentos de memória nos plug-ins?
  • Existe uma maneira de configurar o Chrome para que uma única guia / página não use mais do que uma quantidade definida de RAM?

Obrigado.

Além do arco-íris
fonte
quanta RAM você tem?
Baarn
@OverTheRainbow - Por que não considerar Página Snooze - chrome.google.com/webstore/detail/...
PeanutsMonkey
Eu tenho 4 GB, o que é suficiente, exceto quando algumas páginas da web acabam recebendo 500 MB. Obrigado pelos links no Page Snooze e no Session Buddy.
precisa

Respostas:

-2

Eu acho que você deve optar por comprar o máximo de RAM que seu sistema operacional puder suportar. Você não deve limitar o uso de RAM do Chrome, pois isso arruinará sua experiência de navegação na Web. Supondo que você use seu computador para navegar na Internet a maior parte do tempo, deixe o Chrome obter todos os recursos necessários para fornecer o desempenho que você deseja para "aproveitar" a execução dessas guias ao mesmo tempo.

Acho que não há uma maneira de limitar o uso de RAM de cada guia individual, mas você pode limitar o uso do Chrome por completo. Olhe aqui:

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

Prefiro não fazer isso, se fosse você, se quiser uma navegação suave na web.

WikiWitz
fonte
16
Isso não é realmente uma solução quando você não tem controle sobre o conteúdo do computador que você está usando (por exemplo, computador de trabalho)
Gnoupi
nesse caso, seria bom se houvesse uma maneira de definir 'prioridades' para as guias selecionadas (como a guia ativa absorve a maior parte da memória), pois com RAM limitada e com um computador que você não possui, o usuário é aquele que deve se adaptar (reduzindo o número de guias abertas) o que é contraproducente.
WikiWitz 17/04/12
4
O Chrome consome tanta RAM quanto possível, portanto, adicionar mais RAM é o mesmo que colocar mais madeira no fogo, queima mais.
JDuarteDJ
5
@WikiWitz, você está subestimando a quantidade de RAM que o Chrome consome. Estou com 16 GB de RAM física e ainda não é suficiente.
Pacerier
2
"Supondo que você use seu computador para navegar na Internet a maior parte do tempo" - essa é uma das principais assunções. Nem tudo é um Chromebook.
Piskvor
12
  1. Eu escrevi um programa Python 2.5 que mata os renderizadores do chrome quando eles usam mais de uma quantidade definida de memória. Eu corro este programa em watch. (observe que ele usa o módulo psutil que não está incluído no 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. Confio no Session Buddy para recuperar as abas abertas quando o chrome não conseguir restaurá-las.

Dan D.
fonte
Como o Chrome lida com seus renderizadores sendo mortos? Qual comportamento a guia exibe depois que seu renderizador é morto? Acabei de ver o seu comentário do Session Buddy, o que significa que o Chrome às vezes não consegue restaurá-los, tudo bem. Isso acontece com frequência? Isso é realmente legal, obrigado!
Matthew Matthew
11
@Human As guias que usaram o processo de renderizador que foi morto tornam-se guias com falha. Mas, embora o script acima funcione bem com o Chrome 12 em versões posteriores, ele também mata extensões que, ao contrário do Chrome 12, são executadas nos processos de renderizador e não nos de extensão.
Dan D.
@ Humano É possível perder as últimas guias se você não clicar em restaurar . Além disso, mesmo se você tiver o Last Tabsarquivo, não é possível restaurar as guias desse arquivo. Tentei determinar o formato e extrair os URLs dele há muito tempo. Não foi bem sucedido. E tenho mais confiança no SQLite do que no formato binário que o Chrome usa para armazenar as guias da sessão atual e é por isso que o SB é melhor.
Dan D.
@ DanD., Esse script é seguro? Será que vai acabar com o Chrome inteiro?
Pacerier
@Pacerier Sim, exceto quando o Chrome ainda está na fase de carregamento atrasado da guia após reiniciar, ele não está.
Dan D.
4

A única coisa que vi até agora que pode fazer isso é executar o cromo dentro de um contêiner e limitar a ram dos contêineres .

No entanto, isso tem algumas advertências importantes,

  • A execução do chrome é complicada pela configuração do dockerize e pela sequência de inicialização

  • por um lado, o Chrome já usa contêineres do kernel para proteger seus threads; então você deve executar o contêiner com um tipo de privilégio raiz que permita que isso funcione. Isso pode ser contornado e o modelo de contêiner vinculado. (faz praticamente tudo o que precisa)

  • Você quase certamente perderá a aceleração da GPU

  • fazer o áudio funcionar é complicado, mas manipulado no modelo de contêiner vinculado.

  • Tudo o que você espera que dê errado quando anula sua garantia, o Chrome não gosta de ser instruído a não usar mais memória RAM e agirá de acordo.

Mas finalmente funciona.

Estou mais interessado em aplicar esses limites de RAM aos aplicativos Electron Shell que não têm imagens de janela de encaixe pré-construídas para agrupá-las para você.


Fora do tópico, mas quero observar que o Firefox se comporta muito bem em hardware limitado, mas não considero isso uma resposta real.

ThorSummoner
fonte
Devo atualizar esta resposta para dizer mais sobre como os contêineres são apenas uma interface cgroup, você pode usar o cgroups para fazer o mesmo
ThorSummoner
1

Não é necessariamente um plugin. Observe que as páginas da web não são mais estáticas. Algumas páginas da web têm apenas uma quantidade não trivial de atividade assíncrona em andamento. Adicione a atividade a partir dos plug-ins e você terá algumas incógnitas.

O melhor remédio que encontrei é matar a página da Web e recarregá-la. AFAIK, não há como limitar a quantidade de RAM que uma página da web usa.

surfasb
fonte
0

Mate o processo da guia que está usando grande quantidade de memória (notei que qualquer coisa com o Flash tende a usar 500 MB +). Você pode simplesmente recarregar as guias inativas mais tarde quando desejar continuar trabalhando nelas.

Bigbio2002
fonte
0

O TabMemFree suspenderá automaticamente as guias inativas. Você pode determinar quanto tempo antes de suspender as guias inativas, com no mínimo 15 minutos. Você também pode instruí-lo a ignorar as guias fixadas.

O Tab Wrangler é outra extensão a considerar que suspende automaticamente as guias inativas se você estiver procurando um pouco mais de controle. Como o TabMemFree, você pode determinar o período de tempo antes de uma guia ser considerada inativa e configurá-la para ignorar as guias fixadas, mas você tem a opção adicional de bloquear guias adicionais e sincronizar suas configurações de guia entre computadores diferentes.

Daniel
fonte