¿Por qué Firefox causa "picos" de alto uso de CPU cada pocos segundos?

9

Cuando inicio Firefox, no tengo problemas por un tiempo, pero después de un par de días, comienzan a ocurrir picos de CPU. Durante un pico, Firefox se congela y luego se detiene. Los picos ocurren cada siete a diez segundos, y cada pico dura de dos a tres segundos . Si estoy escribiendo cuando ocurre un pico, los caracteres salen solo después del pico. Inicialmente pensé que este problema se debía a Flash, así que lo desactivé, pero el problema aún ocurre.

Además, el uso de memoria de Firefox aumenta a más de 600 MB después de varios días.

La lista de complementos y extensiones de Firefox que uso está disponible aquí .

Boris_yo
fuente
66
Firefox siempre ha tenido pérdidas de memoria, esa parte es normal.
John T
El síntoma se rastrea en el error 490122 . Parece que ya no los experimento en Firefox 4+, afortunadamente.
RomanSt
1
¡Y cada nueva versión prometen que lo han arreglado! google.com.au/…
Matthew Lock
1
@MatthewLock ¿Qué hay de esto ? Parece que solo los usuarios en Reddit sienten que esto se aborda en cada versión ...
Daniel Beck

Respuestas:

8

Sospecho que es el recolector de basura o el recolector de ciclos.

En about:configcambio javascript.options.mem.loga true. Ahora los avisos sobre GC y CC deberían estar disponibles en la consola de Error ( Crtl+ Shift+ J) Si su tiempo y duración coinciden con la congelación, entonces este es su problema.

Cuando tuve este problema, lo solucioné eliminando mi perfil de Firefox y creando uno nuevo desde cero. Los perfiles de Firefox tienden a acumular mucha basura con el tiempo.

Incluso esto no es una solución perfecta. Si abre muchas pestañas en Firefox (más de 100) o muchas extensiones y deja Firefox funcionando durante días, inevitablemente se ralentizará. Deberá reiniciar Firefox de vez en cuando.

Si eres como yo y tienes tendencia a reunir una gran colección de pestañas que necesitas para lidiar en algún momento, otro truco que utilizo es establecerlo browser.sessionstore.max_concurrent_tabsen 0. Esto evitará que Firefox cargue todas las pestañas de tu sesión al comenzar. En cambio, los cargará cuando cambies a ellos. Creo que esto, más el reinicio ocasional de Firefox, reduce en gran medida la carga de tener muchas pestañas.

Señor alfa
fuente
2
Hay un complemento de Firefox llamado BarTab. Supongo que hace lo mismo con browser.sessionstore.max_concurrent_tabs
Boris_yo
1
Sí, aunque creo que no está actualizado para Firefox 4.
Sr. Alpha
1
"max_concurrent_tabs" no parece estar en Firefox 40 (2015-08).
Peter Mortensen
Creo que el equivalente actual de max_concurrent_tabs es la configuración de las preferencias en "General" llamada "No cargar pestañas hasta que esté seleccionado".
miyalys
9

En about:config, establezca browser.sessionstore.intervalun número grande (debe ser 10,000o 15,000; configúrelo en aproximadamente 600,000).

Básicamente, este es el número de milisegundos entre las veces que Firefox actualiza su "sesión guardada". Si tiene muchas pestañas abiertas, o un historial de navegación largo (o, como suele ser el caso conmigo, ambos), esto puede estar escribiendo una cantidad ridícula de datos en el sessionstore.jsarchivo cada 10 o 15 segundos, lo que puede causar que los videos Flash congele brevemente o incluso congele toda su computadora cada pocos minutos.

Establecer este valor en un gran número tiene la desventaja de que si Firefox falla, pierde sus últimos minutos de historial de navegación cuando intenta restaurar. Eso es un pequeño precio a pagar en mi opinión.

Sus picos de CPU deberían ser mucho menos frecuentes.

Miguel
fuente
2
Tengo instalado el complemento Session Manager. También guarda sesiones permitiendo una mejor gestión y personalización. ¿Qué sucede si Firefox y este complemento actualizan las sesiones y provocan un alto uso de la CPU y fallas? ¿Hay alguna forma de deshabilitar la función de actualización de sesión de Firefox y mantener Session Manager?
Boris_yo
1
En Firefox 40, parece guardarlo en el archivo "\ sessionstore-backups \ recovery.js" (nota: en la subcarpeta "sessionstore-backups") en lugar de "sessionstore.js" (y la versión anterior en "\ sessionstore- backups \ recovery.js ").
Peter Mortensen
1
OK, esto parece haber cambiado con Firefox 33 (2014-06), no con Firefox 40.
Peter Mortensen
4

No reparará las pérdidas de memoria per se. Pero habilitar "No cargar pestañas hasta que esté seleccionado" al menos no cargará las pestañas hasta que haga clic en ellas después de reiniciar, lo que mantiene baja la memoria.

También encontré que usar CCleaner para limpiar la "Sesión" de Firefox ayudó un poco. Haga una copia de seguridad de todas sus pestañas abiertas primero, ya que elimina la información de recuperación de la sesión. Antes de ejecutar CCleaner, mi archivo sessionstore.js era de aproximadamente 800 KB, pero luego se redujo a aproximadamente 6 KB.

Puede encontrar más información sobre el almacén de sesiones en Resuelto: Firefox se congela Cada 10 segundos, el desplazamiento es Jumpy .

Desinstalar Flashblock solucionó mis problemas de CPU alta con Firefox. ¿Quizás Flashblock y Adblock Plus o alguna otra extensión no se llevan bien?

La vida es demasiado corta para jugar con Firefox. Simplemente exporté mis marcadores y desinstalé Firefox, luego eliminé todas las carpetas de Firefox en la máquina, y luego reinstalé Firefox desde cero y restauré los marcadores. Ahora funciona más rápido que Google Chrome con una instalación totalmente nueva.

Matthew Lock
fuente
2

Es muy difícil saberlo. ¿Es solo el uso general lo que lo causa, o está accediendo a un sitio específico? (Tuvimos un problema en el que un navegador ganó memoria con el tiempo debido a una pérdida de memoria en jQuery ).

Suponiendo que está utilizando un sistema operativo Microsoft, puede intentar utilizar la herramienta Process Monitor de Microsoft . Escupe arrojar montones de mensajes, pero debería poder reducirlos al intervalo donde ocurrió el 'congelamiento', y tal vez ver qué proceso está haciendo el bloqueo.

James Wiseman
fuente
jQuery puede tener una pérdida de memoria? Hrmmmmm
Jeff F.
1
Puede pasar. Consulte esta lista de tickets de errores de jQuery: bugs.jquery.com/search?q=leak&go=&ticket=on . Nos encontramos porque estábamos golpeando constantemente una sola página (a través de una solicitud AJAX activada en un intervalo) que precipitó una fuga bastante grande.
James Wiseman
1
Suena más como un problema del navegador y menos de un problema de jQuary es lo que digo, ya que no puede ejecutarse, pero en un navegador (bueno para la mayoría de los casos de todos modos) :) (if while (1 == 1) {} bloquea un navegador culpo al navegador: P)
Jeff F.
1
Si bien tiene razón al afirmar que el navegador tiene la culpa (algunos de los errores en el enlace anterior estaban relacionados con la falla de IE para manejar adecuadamente las referencias circulares), hay pasos que un desarrollador puede tomar en su código JS para mejorar estos problemas. En C / C ++ tiene que limpiar la memoria que ha asignado manualmente, ya que no hay GC para que pueda hacer esto. Si no lo hace, ¿es esto una falla en su código o en el tiempo de ejecución? Yo diría que no tener en cuenta las limitaciones de su entorno puede considerarse un error en su nombre, y parece que así es exactamente como lo ve el equipo de jQuery.
James Wiseman
1
Bueno, esto terminó en una tonta discusión: P. JavaScript no es código, es script; El script se ejecuta dentro de otro programa. Un programa mal escrito se ejecuta solo, requiere una escritura adecuada debido a esto. Un buen programa que acepta script evitará que se rompa solo. Por lo tanto, si revisa bugzilla, verá qué se consideran errores relacionados con JavaScript mal escrito que causa el bloqueo de Firefox. Sin embargo, este tema es bastante obstinado, ¡así que lo dejaré así! (El primer comentario fue más una broma ya que el navegador no filtra jQuery)
Jeff F.
0

Si aún no lo está haciendo, puede intentar actualizar a la última versión de Firefox. Han trabajado duro para reducir esas pérdidas de memoria.

CarlF
fuente
Siempre mejoraba y el problema se quedaba. Prefiero vivir con Firefox 3.6.17
Boris_yo