Dlaczego Firefox powoduje „gwałtowne” wzrosty użycia procesora co kilka sekund?


9

Kiedy uruchamiam Firefoksa, nie mam przez chwilę żadnych problemów, ale po kilku dniach zaczynają występować skoki procesora. Podczas gwałtownego wzrostu Firefox zawiesza się, a następnie zatrzymuje. Skoki występują co siedem do dziesięciu sekund, a każdy skok trwa od dwóch do trzech sekund . Jeśli piszę, gdy wystąpi skok, znaki wyprowadzane są dopiero po skoku. Początkowo myślałem, że ten problem jest spowodowany przez Flash, więc go wyłączyłem, ale problem nadal występuje.

Ponadto użycie pamięci Firefox wzrasta do ponad 600 MB po kilku dniach.

Lista wtyczek i rozszerzeń Firefoksa, których używam, jest dostępna tutaj .


6
Firefox zawsze miał przecieki pamięci, ta część jest normalna.
John T

Objaw jest śledzony w błędzie 490122 . Wydaje mi się, że nie mam ich już w Firefoksie 4+ - na szczęście.
RomanSt

1
I każda nowa wersja, którą obiecują, naprawiła to! google.com.au/…
Matthew Lock

1
@MatthewLock Co z tym ? Wygląda na to, że tylko użytkownicy Reddit mają wrażenie, że jest to adresowane do każdej wersji ...
Daniel Beck

Odpowiedzi:


8

Podejrzewam, że jest to Garbage Collector lub Cycle Collector.

W about:configzamian javascript.options.mem.logna true. Teraz powiadomienia o GC i CC powinny być dostępne w konsoli błędów ( Crtl+ Shift+ J) Jeśli ich czas i czas trwania odpowiadają zamrożeniu, to jest twój problem.

Kiedy miałem ten problem, naprawiłem go, zdmuchując mój profil Firefox i tworząc nowy od podstaw. Profile Firefoksa mają tendencję do gromadzenia dużej ilości z czasem.

Nawet to nie jest idealne rozwiązanie. Jeśli otworzysz wiele kart w przeglądarce Firefox (100+) lub wiele rozszerzeń i pozostawisz Firefoksa działającego przez wiele dni, nieuchronnie zwolni. Co jakiś czas będziesz musiał ponownie uruchomić Firefox.

Jeśli jesteś podobny do mnie i masz tendencję do gromadzenia dużej liczby kart, z którymi musisz sobie poradzić w pewnym momencie, kolejną sztuczką, której używam, jest ustawienie browser.sessionstore.max_concurrent_tabsna 0. Spowoduje to, że Firefox nie ładuje wszystkich kart twojej sesji podczas uruchamiania. Zamiast tego załaduje je, gdy na nie przełączysz. Uważam, że to, a także sporadyczne ponowne uruchamianie przeglądarki Firefox, znacznie zmniejsza obciążenie związane z posiadaniem bardzo wielu kart.


2
Istnieje wtyczka Firefox o nazwie BarTab. Zakładam, że robi to samo z browser.sessionstore.max_concurrent_tabs
Boris_yo

1
Tak, chociaż uważam, że nie jest zaktualizowany do przeglądarki Firefox 4.
Pan Alpha


1
Wydaje się, że „max_concurrent_tabs” nie występuje w przeglądarce Firefox 40 (2015-08).
Peter Mortensen

Myślę, że bieżącym odpowiednikiem max_concurrent_tabs jest ustawienie w preferencjach w „Ogólne” o nazwie „Nie ładuj tabulatorów, dopóki nie zostanie wybrane”.
miyalys,

9

W about:configustaw browser.sessionstore.intervaldużą liczbę (powinna być 10,000lub 15,000; ustaw na około 600,000).

Zasadniczo jest to liczba milisekund między momentami, w których Firefox aktualizuje „zapisaną sesję”. Jeśli masz otwartych wiele kart lub długą historię przeglądania (lub, jak to często bywa u mnie, obie), może to być zapisywanie absurdalnej ilości danych do sessionstore.jspliku co 10 lub 15 sekund, co może powodować, że filmy Flash zawiesić na chwilę lub nawet zamrozić cały komputer co kilka minut.

Ustawienie tej wartości na dużą liczbę ma tę wadę, że jeśli Firefox ulegnie awarii, podczas próby przywracania utracisz ostatnie kilka minut historii przeglądania. To, moim zdaniem, niewielka cena do zapłacenia.

Skoki procesora powinny być znacznie rzadsze.


2
Mam zainstalowaną wtyczkę Session Manager. Oszczędza również sesje, umożliwiając lepsze zarządzanie i dostosowywanie. Co jeśli Firefox i ta wtyczka zarówno sesje aktualizacji powodują wysokie zużycie procesora, jak i awarie? Czy istnieje sposób na wyłączenie funkcji aktualizacji sesji Firefoksa i utrzymanie Menedżera sesji?
Boris_yo,

1
W przeglądarce Firefox 40 wydaje się zapisywać go w pliku „\ sessionstore-backups \ recovery.js” (uwaga: w podfolderze „sessionstore-backups”) zamiast „sessionstore.js” (i poprzedniej wersji w „\ sessionstore- backups \ recovery.js ").
Peter Mortensen

1
OK, wydaje się, że zmieniło się to w Firefox 33 (2014-06), a nie Firefox 40.
Peter Mortensen

4

Nie naprawi przecieków pamięci per se. Ale włączenie opcji „Nie ładuj kart, dopóki nie zostanie zaznaczone”, przynajmniej nie ładuje kart, dopóki nie klikniesz ich po ponownym uruchomieniu, co spowoduje znaczne zmniejszenie pamięci.

Zauważyłem również, że użycie CCleaner do wyczyszczenia „Sesji” Firefoksa trochę pomogło. Najpierw wykonaj kopię zapasową wszystkich otwartych kart, ponieważ usuwa ona informacje odzyskiwania sesji. Przed uruchomieniem CCleaner mój plik sessionstore.js miał około 800 KB, ale później do około 6 KB.

Więcej informacji o sklepie sesyjnym można znaleźć w Rozwiązane: Firefox zawiesza się co 10 sekund, przewijanie jest przeskakujące .

Odinstalowanie Flashblock naprawiło moje problemy z wysokim procesorem w Firefoksie. Być może Flashblock i Adblock Plus lub inne rozszerzenie nie dają sobie rady?

Życie jest zbyt krótkie, aby zadzierać z Firefoksem. Właśnie wyeksportowałem moje zakładki, odinstalowałem Firefoksa, następnie usunąłem wszystkie foldery Firefoksa na komputerze, a następnie ponownie zainstalowałem Firefoksa od zera i przywróciłem zakładki. Teraz działa szybciej niż Google Chrome z całkowicie nową instalacją.


2

Bardzo trudno powiedzieć. Czy powoduje to tylko ogólne użycie, czy uzyskujesz dostęp do określonej witryny? (Mieliśmy problem polegający na tym, że przeglądarka zyskiwała pamięć z czasem z powodu wycieku pamięci w jQuery ).

Zakładając, że używasz systemu operacyjnego Microsoft, możesz spróbować użyć narzędzia Microsoft Process Monitor . Wyrzuca z siebie mnóstwo wiadomości, ale powinieneś być w stanie zawęzić je do przedziału, w którym nastąpiło „zamrożenie” i być może zobaczyć, jaki proces wykonuje blokowanie.


jQuery może mieć wyciek pamięci? Hrmmmmm
Jeff F.

1
To może się zdarzyć. Zobacz listę zgłoszeń błędów jQuery: bugs.jquery.com/search?q=leak&go=&ticket=on . Napotkaliśmy, ponieważ ciągle odwiedzaliśmy jedną stronę (poprzez żądanie AJAX uruchamiane w odstępach czasu), co spowodowało dość duży wyciek.
James Wiseman

1
Brzmi bardziej jak problem z przeglądarką, a mniej chodzi o problem z jQuary, ponieważ nie można go uruchomić, ale w przeglądarce (w większości przypadków w każdym razie) :) (jeśli while (1 == 1) {} powoduje awarię przeglądarka Obwiniam przeglądarkę: P)
Jeff F.

1
Chociaż masz rację, twierdząc, że wina jest spowodowana przez przeglądarkę (niektóre błędy w powyższym linku były związane z niepoprawną obsługą referencji cyklicznych przez IE), istnieją kroki, które deweloper może podjąć w kodzie JS, aby poprawić te problemy. W C / C ++ musisz wyczyścić pamięć, którą ręcznie przydzieliłeś, ponieważ nie ma do tego GC. Jeśli nie, to jest to błąd w kodzie lub środowisku uruchomieniowym? Argumentowałbym, że nieuwzględnianie ograniczeń twojego środowiska może być uznane za błąd w twoim imieniu i wygląda na to, że dokładnie tak samo postrzega go zespół jQuery.
James Wiseman

1
Cóż, skończyło się to głupim argumentem: P. JavaScript to nie kod, to skrypt; skrypt działa w innym programie. Źle napisany program działa sam, dlatego wymaga odpowiedniego pisania. Dobry program, który akceptuje skrypt, sam się nie złamie. Dlatego jeśli sprawdzisz Bugzillę, zobaczysz błędy uważane za źle napisane JavaScript, które powodują awarię Firefoksa. Ten temat jest jednak dość uparty, więc zostawię go przy tym! (Pierwszy komentarz był bardziej żartem, ponieważ przeglądarka przecieka nie jQuery)
Jeff F.

0

Jeśli jeszcze tego nie robisz, możesz spróbować zaktualizować Firefoksa do najnowszej wersji. Ciężko pracowali, aby zmniejszyć te wycieki pamięci.


Zawsze aktualizowałem i problem pozostał. Wolę żyć z Firefoksem 3.6.17
Boris_yo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.