Por que o Firefox causa "picos" de alto uso da CPU a cada poucos segundos?

9

Quando inicio o Firefox, não tenho problemas por um tempo, mas depois de alguns dias, os picos de CPU começam a ocorrer. Durante um pico, o Firefox congela e depois para. Os picos ocorrem a cada sete a dez segundos e cada pico dura de dois a três segundos . Se eu estiver digitando quando ocorrer um pico, os caracteres serão exibidos somente após o pico. Inicialmente, pensei que esse problema era por causa do Flash, então o desativei, mas o problema ainda ocorre.

Além disso, o uso de memória do Firefox aumenta para mais de 600 MB após vários dias.

A lista de plugins e extensões do Firefox que eu uso está disponível aqui .

Boris_yo
fonte
6
O Firefox sempre teve vazamentos de memória, essa parte é normal.
John T
O sintoma é rastreado no bug 490122 . Parece que não estou mais experimentando isso no Firefox 4+ - felizmente.
RomanSt
11
E todas as novas versões que prometem ter corrigido! google.com.au/...
Matthew Bloqueio
11
@MatthewLock Que tal isso ? Parece apenas os usuários sobre Reddit sentir como isso fica abordadas todas as versões ...
Daniel Beck

Respostas:

8

Eu suspeito que seja o coletor de lixo ou o coletor de ciclos.

Em about:configmudar javascript.options.mem.logpara true. Agora, os avisos sobre o GC e o CC devem estar disponíveis no console Error ( Crtl+ Shift+ J). Se o tempo e a duração deles coincidirem com o congelamento, esse é o seu problema.

Quando tive esse problema, eu o corrigi, extrapolando meu perfil do Firefox e criando um novo a partir do zero. Os perfis do Firefox tendem a reunir muitos problemas ao longo do tempo.

Mesmo isso não é uma solução perfeita. Se você abrir muitas abas no Firefox (mais de 100) ou muitas extensões e deixar o Firefox funcionando por dias a fio, ele inevitavelmente diminuirá. Você precisará reiniciar o Firefox de vez em quando.

Se você é como eu e tem a tendência de reunir uma grande coleção de guias, precisa lidar com isso em algum momento. Outro truque que eu uso é definir browser.sessionstore.max_concurrent_tabscomo 0. Isso impedirá o Firefox de carregar todas as guias da sua sessão ao iniciar. Em vez disso, ele será carregado quando você alternar para eles. Acho que isso, além do reinício ocasional do Firefox, reduz bastante a carga de ter muitas guias.

Mr Alpha
fonte
2
Existe o plugin do Firefox chamado BarTab. Presumo que ele faz mesmo sobre browser.sessionstore.max_concurrent_tabs
Boris_yo
11
Sim, embora eu acredito que não é atualizado para o Firefox 4.
Sr. Alpha
11
"max_concurrent_tabs" não parece estar no Firefox 40 (2015-08).
Peter Mortensen
Eu acho que o equivalente atual de max_concurrent_tabs é a configuração nas preferências em "Geral" chamada "Não carrega guias até ser selecionada".
precisa saber é
9

Em about:config, defina browser.sessionstore.intervalpara um número grande (deve ser 10,000ou 15,000; defina-o para aproximadamente 600,000).

Basicamente, este é o número de milissegundos entre as vezes que o Firefox atualiza sua "sessão salva". Se você tiver muitas guias abertas ou um longo histórico de navegação (ou, como geralmente acontece comigo), isso sessionstore.jspode gerar uma quantidade ridícula de dados no arquivo a cada 10 ou 15 segundos, o que pode causar vídeos em Flash. congelar brevemente ou até congelar todo o computador a cada poucos minutos.

Definir esse valor como um número grande tem a desvantagem de que, se o Firefox travar, você perde seus últimos minutos de histórico de navegação ao tentar restaurar. Esse é um preço pequeno a pagar na minha opinião.

Seus picos de CPU devem se tornar muito menos frequentes.

Mike
fonte
2
Eu tenho o plugin Session Manager instalado. Ele também salva sessões, permitindo melhor gerenciamento e personalização. E se o Firefox e este plugin atualizarem as sessões, causando alto uso da CPU e travando? Existe uma maneira de desativar a função de atualização de sessão do Firefox e manter o Session Manager?
Boris_yo
11
No Firefox 40, parece salvá-lo no arquivo "\ sessionstore-backups \ recovery.js" (nota: na subpasta "sessionstore-backups") em vez de "sessionstore.js" (e na versão anterior em "\ sessionstore- backups \ recovery.js ").
Peter Mortensen
11
OK, isso parece ter mudado com o Firefox 33 (2014-06), não Firefox 40.
Peter Mortensen
4

Não corrige vazamentos de memória em si. Mas ativar "Não carregar guias até ser selecionado" pelo menos não carregará as guias até você clicar nelas após uma reinicialização, o que mantém a memória baixa.

Também descobri que o uso do CCleaner para limpar a "Sessão" do Firefox ajudou um pouco. Faça backup de todas as suas guias abertas primeiro, pois remove as informações de recuperação da sessão. Antes de executar o CCleaner, meu arquivo sessionstore.js tinha cerca de 800 KB, mas depois caiu para cerca de 6 KB.

Mais informações sobre o sessionstore podem ser encontradas em Resolvido: O Firefox congela a cada 10 segundos, a rolagem é irregular .

A desinstalação do Flashblock corrigiu meus problemas de CPU alta com o Firefox. Talvez o Flashblock e o Adblock Plus ou alguma outra extensão não se entendam?

A vida é muito curta para mexer com o Firefox. Acabei de exportar meus favoritos, desinstalar o Firefox, excluir todas as pastas do Firefox na máquina, reinstalar o Firefox do zero e restaurar os favoritos. Agora ele roda mais rápido que o Google Chrome, com uma instalação totalmente nova.

Matthew Lock
fonte
2

É muito difícil dizer. É apenas o uso geral que a causa, ou você está acessando um site específico? (Tivemos um problema em que um navegador ganhou memória ao longo do tempo devido a um vazamento de memória no jQuery ).

Supondo que você esteja usando um sistema operacional da Microsoft, tente usar a ferramenta Process Monitor da Microsoft . Ele espalha muitas mensagens, mas você deve ser capaz de reduzi-las ao intervalo em que ocorreu o 'congelamento' e talvez ver qual processo está bloqueando.

James Wiseman
fonte
jQuery pode ter um vazamento de memória? Hrmmmmm
Jeff F.
11
Pode acontecer. Veja esta lista de tickets de bug do jQuery: bugs.jquery.com/search?q=leak&go=&ticket=on . Encontramos porque estávamos constantemente acessando uma única página (por meio de uma solicitação AJAX acionada em um intervalo) que precipitava um vazamento bastante grande.
James Wiseman
11
Parece mais um problema do navegador e menos um problema do jQuary, é o que estou dizendo, já que não pode ser executado, mas em um navegador (bom para a maioria dos casos) :) (se enquanto (1 == 1) {} trava um navegador Eu culpo o navegador: P)
Jeff F.
11
Embora você esteja certo ao afirmar que o navegador está com falha (alguns dos erros no link acima estavam relacionados à falha do IE em manipular adequadamente as referências circulares), há etapas que um desenvolvedor pode executar em seu código JS para melhorar esses problemas. No C / C ++, é necessário limpar a memória que você alocou manualmente, pois não há GC para fazer isso. Se não, isso é uma falha no seu código ou no tempo de execução? Eu argumentaria que não considerar as limitações do seu ambiente pode ser considerado um erro em seu nome, e parece que é exatamente assim que a equipe do jQuery também o vê.
James Wiseman
11
Bem, isso acabou em um argumento bobo: P. JavaScript não é código, é script; O script é executado em outro programa. Um programa mal escrito é executado sozinho e requer uma escrita adequada por causa disso. Um bom programa que aceita scripts impedirá que ele se quebre. Por isso, se você verificar o bugzilla, verá os bugs relacionados ao JavaScript mal escrito, causando a falha do Firefox. Este tópico é bastante opinativo, então vou deixar por isso mesmo! (O primeiro comentário era mais uma piada desde os vazamentos navegador não jQuery)
Jeff F.
0

Se você ainda não estiver fazendo isso, tente atualizar para o Firefox mais recente. Eles trabalharam duro para reduzir esses vazamentos de memória.

CarlF
fonte
Eu sempre atualizei e o problema ficou. Eu prefiro viver com o Firefox 3.6.17
Boris_yo