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