Warum verursacht Firefox alle paar Sekunden „Spitzen“ mit hoher CPU-Auslastung?

9

Wenn ich Firefox starte, habe ich eine Weile keine Probleme, aber nach ein paar Tagen treten CPU-Spitzen auf. Während eines Spikes friert Firefox ein und stoppt dann. Spitzen treten alle sieben bis zehn Sekunden auf und jede Spitze dauert zwei bis drei Sekunden . Wenn ich tippe, wenn eine Spitze auftritt, werden Zeichen erst nach der Spitze ausgegeben. Ich dachte anfangs, dieses Problem sei auf Flash zurückzuführen, also habe ich es deaktiviert, aber das Problem tritt immer noch auf.

Außerdem steigt die Speichernutzung von Firefox nach einigen Tagen auf über 600 MB.

Die Liste der von mir verwendeten Firefox-Plugins und -Erweiterungen finden Sie hier .

Boris_yo
quelle
6
Firefox hatte immer Speicherlecks, dieser Teil ist normal.
John T
Das Symptom wird in Fehler 490122 verfolgt . Ich scheine diese in Firefox 4+ nicht mehr zu erleben - Gott sei Dank.
RomanSt
1
Und jede neue Version, die sie versprechen, hat sie behoben! google.com.au/…
Matthew Lock
1
@MatthewLock Was ist damit ? Es scheint, dass nur Benutzer auf Reddit das Gefühl haben, dass dies in jeder Version angesprochen wird ...
Daniel Beck

Antworten:

8

Ich vermute, es ist entweder der Garbage Collector oder der Cycle Collector.

Im about:configWechsel javascript.options.mem.logzu true. Jetzt sollten Hinweise zu GC und CC in der Fehlerkonsole verfügbar sein ( Crtl+ Shift+ J). Wenn ihr Timing und ihre Dauer mit dem Einfrieren übereinstimmen, ist dies Ihr Problem.

Als ich dieses Problem hatte, habe ich es behoben, indem ich mein Firefox-Profil weggeblasen und ein neues von Grund auf neu erstellt habe. Die Firefox-Profile neigen dazu, im Laufe der Zeit viel Rohöl zu sammeln.

Auch dies ist keine perfekte Lösung. Wenn Sie viele Registerkarten in Firefox (100+) oder viele Erweiterungen öffnen und Firefox tagelang laufen lassen, wird dies unweigerlich langsamer. Sie müssen Firefox von Zeit zu Zeit neu starten.

Wenn Sie wie ich sind und die Tendenz haben, eine große Sammlung von Registerkarten zu sammeln, mit denen Sie sich irgendwann befassen müssen, ist es ein weiterer Trick, den ich verwende, browser.sessionstore.max_concurrent_tabsauf 0 zu setzen . Dadurch wird verhindert, dass Firefox beim Start alle Registerkarten Ihrer Sitzung lädt. Sie werden stattdessen geladen, wenn Sie zu ihnen wechseln. Ich finde, dass dies und der gelegentliche Neustart von Firefox die Belastung durch sehr viele Registerkarten erheblich reduzieren.

Herr Alpha
quelle
2
Es gibt das Firefox-Plugin BarTab. Ich gehe
Boris_yo
1
Ja, obwohl ich glaube, dass es nicht für Firefox 4 aktualisiert wurde.
Mr Alpha
1
"max_concurrent_tabs" scheint nicht in Firefox 40 (2015-08) enthalten zu sein.
Peter Mortensen
Ich denke, das aktuelle Äquivalent von max_concurrent_tabs ist die Einstellung in den Einstellungen unter "Allgemein" mit dem Namen "Tabs erst laden, wenn sie ausgewählt sind".
Miyalys
9

In about:config, setzt browser.sessionstore.intervalauf eine große Anzahl (sollte es sein 10,000oder 15,000, stellen Sie sich auf etwa 600,000).

Grundsätzlich ist dies die Anzahl der Millisekunden zwischen den Aktualisierungen Ihrer "gespeicherten Sitzung" durch Firefox. Wenn Sie viele Registerkarten geöffnet haben oder einen langen Browserverlauf haben (oder, wie es bei mir häufig der Fall ist, beide), kann dies dazu führen, dass sessionstore.jsalle 10 oder 15 Sekunden eine lächerliche Datenmenge in die Datei geschrieben wird, was dazu führen kann, dass Flash-Videos angezeigt werden Frieren Sie kurz ein oder lassen Sie Ihren gesamten Computer alle paar Minuten einfrieren.

Das Festlegen dieses Werts auf eine große Zahl hat den Nachteil, dass Sie bei einem Absturz von Firefox beim Wiederherstellen die letzten Minuten des Browserverlaufs verlieren. Das ist meiner Meinung nach ein kleiner Preis.

Ihre CPU-Spitzen sollten viel seltener werden.

Mike
quelle
2
Ich habe das Session Manager Plugin installiert. Außerdem werden Sitzungen gespeichert, die eine bessere Verwaltung und Anpassung ermöglichen. Was passiert, wenn Firefox und dieses Plugin beide Sitzungen aktualisieren, was zu einer hohen CPU-Auslastung und Abstürzen führt? Gibt es eine Möglichkeit, die Sitzungsaktualisierungsfunktion von Firefox zu deaktivieren und den Sitzungsmanager beizubehalten?
Boris_yo
1
In Firefox 40 wird es anscheinend in der Datei "\ sessionstore-backups \ recovery.js" (Hinweis: im Unterordner "sessionstore-backups") anstelle von "sessionstore.js" (und der vorherigen Version in "\ sessionstore-" gespeichert. Backups \ recovery.js ").
Peter Mortensen
1
OK, dies scheint sich mit Firefox 33 (2014-06) geändert zu haben , nicht mit Firefox 40.
Peter Mortensen
4

Es werden keine Speicherlecks an sich behoben. Wenn Sie jedoch "Tabs erst nach Auswahl laden" aktivieren, werden die Tabs zumindest erst geladen, wenn Sie nach einem Neustart darauf klicken, wodurch der Arbeitsspeicher niedrig bleibt.

Ich fand auch, dass die Verwendung von CCleaner zum Bereinigen der Firefox "Session" etwas hilfreich war. Sichern Sie zuerst alle geöffneten Registerkarten, während die Informationen zur Sitzungswiederherstellung entfernt werden. Vor dem Ausführen von CCleaner war meine Datei sessionstore.js ungefähr 800 KB groß, danach sind es nur noch 6 KB.

Weitere Informationen zum Sessionstore finden Sie unter Gelöst: Firefox friert alle 10 Sekunden ein, das Scrollen ist sprunghaft .

Durch die Deinstallation von Flashblock wurden meine Probleme mit der hohen CPU mit Firefox behoben. Vielleicht verstehen sich Flashblock und Adblock Plus oder eine andere Erweiterung nicht?

Das Leben ist zu kurz, um mit Firefox herumzuspielen. Ich habe gerade meine Lesezeichen exportiert und Firefox deinstalliert, dann alle Firefox-Ordner auf dem Computer gelöscht, Firefox von Grund auf neu installiert und die Lesezeichen wiederhergestellt. Jetzt läuft es mit einer völlig neuen Installation schneller als Google Chrome.

Matthew Lock
quelle
2

Es ist sehr schwer zu sagen. Ist es nur die allgemeine Verwendung, die es verursacht, oder greifen Sie auf eine bestimmte Site zu? (Wir hatten ein Problem, bei dem ein Browser im Laufe der Zeit aufgrund eines Speicherverlusts in jQuery Speicherplatz erhielt. )

Angenommen, Sie verwenden ein Microsoft-Betriebssystem, können Sie das Process Monitor- Tool von Microsoft verwenden. Es spuckt viele Nachrichten aus, aber Sie sollten in der Lage sein, sie auf das Intervall zu beschränken, in dem das "Einfrieren" aufgetreten ist, und möglicherweise zu sehen, welcher Prozess die Blockierung ausführt.

James Wiseman
quelle
jQuery kann einen Speicherverlust haben? Hrmmmmm
Jeff F.
1
Es kann vorkommen. Siehe diese Liste der jQuery-Bug-Tickets: bugs.jquery.com/search?q=leak&go=&ticket=on . Wir sind darauf gestoßen, weil wir ständig auf eine einzelne Seite gestoßen sind (durch eine AJAX-Anforderung, die in bestimmten Intervallen ausgelöst wurde), die ein ziemlich großes Leck ausgelöst hat.
James Wiseman
1
Klingt eher nach einem Browserproblem und weniger nach einem jQuary-Problem, da es nur in einem Browser ausgeführt werden kann (in den meisten Fällen jedenfalls) :) (wenn while (1 == 1) {} abstürzt a Browser Ich beschuldige den Browser: P)
Jeff F.
1
Während Sie zu Recht behaupten, dass der Browser fehlerhaft ist (einige der Fehler auf dem obigen Link waren darauf zurückzuführen, dass der IE Zirkelverweise nicht ordnungsgemäß verarbeitet hat), kann ein Entwickler in seinem JS-Code Maßnahmen ergreifen, um diese Probleme zu beheben. In C / C ++ müssen Sie den manuell zugewiesenen Speicher bereinigen, da Sie dafür keinen GC haben. Wenn Sie dies nicht tun, ist dies ein Fehler in Ihrem Code oder in der Laufzeit? Ich würde argumentieren, dass die Nichtberücksichtigung der Einschränkungen Ihrer Umgebung als Fehler in Ihrem Namen angesehen werden kann, und es sieht so aus, als würde das jQuery-Team dies auch so sehen.
James Wiseman
1
Nun, das endete in einem dummen Streit: P. JavaScript ist kein Code, sondern ein Skript. Das Skript wird in einem anderen Programm ausgeführt. Ein schlecht geschriebenes Programm läuft von selbst und muss daher ordnungsgemäß geschrieben werden. Ein gutes Programm, das Skripte akzeptiert, verhindert, dass es sich selbst zerstört. Wenn Sie Bugzilla überprüfen, werden Sie feststellen, welche Fehler im Zusammenhang mit schlecht geschriebenem JavaScript als Absturz von Firefox angesehen werden. Dieses Thema ist allerdings ziemlich eigensinnig, also lasse ich es dabei! (Der erste Kommentar war eher ein Witz, da der Browser nicht jQuery leckt)
Jeff F.
0

Wenn Sie dies noch nicht getan haben, können Sie versuchen, ein Upgrade auf den neuesten Firefox durchzuführen. Sie haben hart gearbeitet, um diese Speicherlecks zu reduzieren.

CarlF
quelle
Ich habe immer ein Upgrade durchgeführt und das Problem ist geblieben. Ich lebe lieber mit Firefox 3.6.17
Boris_yo