Pourquoi Firefox provoque-t-il des «pics» d'utilisation élevée du processeur toutes les quelques secondes?

9

Lorsque je démarre Firefox, je n'ai aucun problème depuis un certain temps, mais après quelques jours, des pics de CPU commencent à se produire. Lors d'un pic, Firefox se fige puis s'arrête. Les pointes se produisent toutes les sept à dix secondes, et chaque pointe dure de deux à trois secondes . Si je tape quand un pic se produit, les caractères ne sortent qu'après le pic. J'ai d'abord pensé que ce problème était dû à Flash, alors je l'ai désactivé, mais le problème persiste.

En outre, l'utilisation de la mémoire de Firefox augmente à plus de 600 Mo après plusieurs jours.

La liste des plugins et extensions Firefox que j'utilise est disponible ici .

Boris_yo
la source
6
Firefox a toujours eu des fuites de mémoire, cette partie est normale.
John T
Le symptôme est suivi dans le bogue 490122 . Je ne semble plus en faire l'expérience dans Firefox 4+ - heureusement.
RomanSt
1
Et chaque nouvelle version promet de l'avoir corrigée! google.com.au/…
Matthew Lock
1
@MatthewLock Et à ce sujet ? Il semble que seuls les utilisateurs de Reddit aient l'impression que cela est corrigé à chaque version ...
Daniel Beck

Réponses:

8

Je soupçonne que c'est le Garbage Collector ou le Cycle Collector.

En about:configchangement javascript.options.mem.logà true. Maintenant, des avis sur GC et CC devraient être disponibles dans la console d'erreur ( Crtl+ Shift+ J) Si leur synchronisation et leur durée correspondent au gel, alors c'est votre problème.

Lorsque j'ai eu ce problème, je l'ai résolu en supprimant mon profil Firefox et en créant un nouveau à partir de zéro. Les profils Firefox ont tendance à accumuler beaucoup de crud au fil du temps.

Même ce n'est pas une solution de préfet. Si vous ouvrez beaucoup d'onglets dans Firefox (100+) ou beaucoup d'extensions et laissez Firefox fonctionner pendant des jours, cela ralentira inévitablement. Vous devrez redémarrer Firefox de temps en temps.

Si vous êtes comme moi et que vous avez tendance à rassembler une grande collection d'onglets dont vous avez besoin pour vous occuper à un moment donné, une autre astuce que j'utilise est de mettre browser.sessionstore.max_concurrent_tabsà 0. Cela empêchera Firefox de charger tous les onglets de votre session au démarrage. Il les chargera à la place lorsque vous passerez à eux. Je trouve cela, plus le redémarrage occasionnel de Firefox, réduit considérablement la charge d'avoir un grand nombre d'onglets.

Mr Alpha
la source
2
Il existe un plugin Firefox appelé BarTab. Je suppose que cela fait la même chose pour browser.sessionstore.max_concurrent_tabs
Boris_yo
1
Oui, même si je pense qu'il n'est pas mis à jour pour Firefox 4.
Mr Alpha
1
"max_concurrent_tabs" ne semble pas être dans Firefox 40 (2015-08).
Peter Mortensen
Je pense que l'équivalent actuel de max_concurrent_tabs est le réglage dans les préférences sous "Général" appelé "Ne pas charger les onglets avant d'être sélectionné".
miyalys
9

Dans about:config, définissez browser.sessionstore.intervalun grand nombre (il doit être 10,000ou 15,000; définissez-le sur environ 600,000).

Fondamentalement, il s'agit du nombre de millisecondes entre chaque fois que Firefox met à jour votre "session enregistrée". Si vous avez de nombreux onglets ouverts ou un long historique de navigation (ou, comme c'est souvent le cas pour moi, les deux), cela peut écrire une quantité ridicule de données dans le sessionstore.jsfichier toutes les 10 ou 15 secondes, ce qui peut entraîner des vidéos Flash figer brièvement ou même rendre votre ordinateur entier figé toutes les quelques minutes.

Définir cette valeur sur un grand nombre a l'inconvénient que si Firefox se bloque, vous perdez vos dernières minutes d'historique de navigation lorsque vous essayez de restaurer. C'est un petit prix à payer à mon avis.

Vos pics de CPU devraient devenir beaucoup moins fréquents.

Mike
la source
2
J'ai installé le plugin Session Manager. Il enregistre également les sessions permettant une meilleure gestion et personnalisation. Que se passe-t-il si Firefox et ce plugin mettent à jour les sessions entraînant une utilisation élevée du processeur et des plantages? Existe-t-il un moyen de désactiver la fonction de mise à jour de session de Firefox et de conserver Session Manager?
Boris_yo
1
Dans Firefox 40, il semble l'enregistrer dans le fichier "\ sessionstore-backups \ recovery.js" (remarque: dans le sous-dossier "sessionstore-backups") au lieu de "sessionstore.js" (et la version précédente dans "\ sessionstore- backups \ recovery.js ").
Peter Mortensen
1
OK, cela semble avoir changé avec Firefox 33 (2014-06), pas Firefox 40.
Peter Mortensen
4

Il ne résoudra pas les fuites de mémoire en soi. Mais l'activation de "Ne pas charger les onglets jusqu'à ce qu'ils soient sélectionnés" ne chargera pas au moins les onglets tant que vous n'aurez pas cliqué dessus après un redémarrage, ce qui réduit considérablement la mémoire.

J'ai également trouvé que l'utilisation de CCleaner pour nettoyer la "Session" de Firefox m'a aidé un peu. Sauvegardez d'abord tous vos onglets ouverts car cela supprime les informations de récupération de session. Avant d'exécuter CCleaner, mon fichier sessionstore.js faisait environ 800 Ko, mais il est ensuite réduit à environ 6 Ko.

Plus d'informations sur sessionstore peuvent être trouvées dans Résolu: Firefox se fige toutes les 10 secondes, le défilement est nerveux .

La désinstallation de Flashblock a résolu mes problèmes de processeur élevés avec Firefox. Peut-être que Flashblock et Adblock Plus ou une autre extension ne s'entendent pas?

La vie est trop courte pour jouer avec Firefox. Je viens d'exporter mes signets et j'ai désinstallé Firefox, puis supprimé tous les dossiers Firefox sur la machine, puis réinstallé Firefox à partir de zéro et restauré les signets. Maintenant, il fonctionne plus rapidement que Google Chrome avec une toute nouvelle installation.

Matthew Lock
la source
2

C'est très difficile à dire. Est-ce seulement une utilisation générale qui en est la cause, ou accédez-vous à un site spécifique? (Nous avons eu un problème où un navigateur a gagné de la mémoire au fil du temps en raison d'une fuite de mémoire dans jQuery ).

En supposant que vous utilisez un système d'exploitation Microsoft, vous pouvez essayer d'utiliser l' outil Process Monitor de Microsoft . Il crache beaucoup de messages, mais vous devriez pouvoir les réduire à l'intervalle où le «gel» s'est produit, et peut-être voir quel processus fait le blocage.

James Wiseman
la source
jQuery peut avoir une fuite de mémoire? Hrmmmmm
Jeff F.
1
Cela peut arriver. Consultez cette liste de tickets de bogue jQuery: bugs.jquery.com/search?q=leak&go=&ticket=on . Nous avons rencontré parce que nous étions constamment en train de frapper une seule page (via une requête AJAX déclenchée à un intervalle) qui a précipité une fuite assez importante.
James Wiseman
1
Cela ressemble plus à un problème de navigateur et moins d'un problème de janvier, c'est ce que je dis car il ne peut pas fonctionner mais dans un navigateur (enfin dans la plupart des cas) :) (si while (1 == 1) {} plante un navigateur Je blâme le navigateur: P)
Jeff F.
1
Bien que vous ayez raison d'affirmer que le navigateur est en défaut (certains des bogues sur le lien ci-dessus étaient liés à l'incapacité d'IE à gérer correctement les références circulaires), il existe des étapes qu'un développeur peut suivre dans son code JS pour améliorer ces problèmes. En C / C ++, vous devez nettoyer la mémoire que vous avez allouée manuellement car il n'y a pas de GC pour vous. Si ce n'est pas le cas, est-ce une faute dans votre code ou dans le runtime? Je dirais que le fait de ne pas tenir compte des limitations de votre environnement peut être considéré comme un bogue en votre nom, et il semble que c'est exactement ainsi que l'équipe jQuery le voit.
James Wiseman
1
Eh bien, cela s'est terminé par un argument stupide: P. JavaScript n'est pas du code, c'est un script; le script s'exécute dans un autre programme. Un programme mal écrit s'exécute de lui-même, il nécessite une écriture appropriée à cause de cela. Un bon programme qui accepte le script l'empêchera de se casser. Par conséquent, si vous cochez bugzilla, vous verrez ce qui est considéré comme des bogues liés à un JavaScript mal écrit provoquant le plantage de Firefox. Ce sujet est assez perspicace, donc je vais en rester là! (Le premier commentaire était plus une blague car le navigateur ne fuit pas jQuery)
Jeff F.
0

Si vous ne le faites pas déjà, vous pouvez essayer de passer à la dernière version de Firefox. Ils ont travaillé dur pour réduire ces fuites de mémoire.

CarlF
la source
J'ai toujours mis à niveau et le problème est resté. Je préfère vivre avec Firefox 3.6.17
Boris_yo