Limitando o uso de RAM no Chrome?

Limitando o uso de RAM no Chrome?

Ao deixar diversas abas abertas no Google Chrome por horas/dias, percebo que algumas páginas acabam utilizando grandes quantidades de RAM, a ponto de todo o SO (XP) parar de responder devido à paginação. Quando tiver sorte, posso finalmente marcar a lista de URLs abertos, fechar o Chrome e começar de novo; Quando não estou, simplesmente devo encerrar o Chrome e esperar poder recuperar a lista de URLs abertos.

  • Por que é que? Vazamentos de memória em 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.

Responder1

Acho que você deveria 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 porque isso apenas arruinará sua experiência de navegação na Web. Supondo que você use seu computador para navegar na Internet na maior parte do tempo, você deve permitir que o Chrome obtenha todos os recursos necessários para oferecer o desempenho que você deseja para você “aproveitar” a execução dessas guias ao mesmo tempo.

Não acho que exista uma maneira de limitar o uso de RAM de cada guia individual, mas você pode limitar completamente o uso do Chrome. Olhe aqui:

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

Eu preferiria não fazer isso, se fosse você, se quiser uma navegação tranquila na web.

Responder2

  1. Eu escrevi um programa Python 2.5 que mata os renderizadores do Chrome quando eles usam uma determinada quantidade de memória. Eu executo este programa em watch. (observe que ele usa opsutilmódulo 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. eu confio emAmigo de sessãopara recuperar as guias abertas quando o Chrome não consegue restaurá-las.

Responder3

A única coisa que vi até agora que pode fazer isso éexecute o chrome dentro de um contêinerelimitar a memória 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 de kernel para proteger seus threads; então você precisa executar o contêiner com um tipo de privilégio de root que permita que isso funcione. Isso pode ser contornado, e o modelo de contêiner vinculado faz isso. (faz praticamente tudo o que precisa)

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

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

  • Seja o que for que você espera que dê errado ao anular a garantia, o Chrome não gosta violentamente de ser instruído a não usar mais memória RAM e fará birra de acordo.

Mas no final das contas funciona.

Estou mais interessado em aplicar esses limites de memória RAM a aplicativos Electron Shell que não possuem imagens docker pré-construídas para organizá-los para você.


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

Responder4

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 nada trivial de atividade assíncrona em andamento. Adicione a atividade dos plug-ins e você terá algumas incógnitas.

A melhor solução que encontrei é encerrar 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.

informação relacionada