Почему Firefox вызывает «пики» при высокой загрузке процессора каждые несколько секунд?


9

Когда я запускаю Firefox, у меня некоторое время не возникает проблем, но через пару дней начинают происходить пики ЦП. Во время всплеска Firefox зависает, а затем останавливается. Пики происходят каждые семь-десять секунд, и каждый всплеск длится две-три секунды . Если я печатаю, когда происходит всплеск, символы выводятся только после всплеска. Сначала я думал, что эта проблема из-за Flash, поэтому я отключил ее, но проблема все еще возникает.

Кроме того, использование памяти Firefox увеличивается до более чем 600 МБ через несколько дней.

Список плагинов и расширений Firefox, которые я использую, доступен здесь .


6
У Firefox всегда были утечки памяти, эта часть нормальная.
Джон Т

Симптом отслеживается в ошибке 490122 . Я, кажется, больше не испытываю их в Firefox 4+ - к счастью.
RomanSt

1
И каждая новая версия, которую они обещают, они исправили! google.com.au/…
Мэтью Лок

1
@MatthewLock Как насчет этого ? Кажется, что только пользователи на Reddit чувствуют, что к каждой версии обращаются ...
Даниэль Бек

Ответы:


8

Я подозреваю, что это либо Сборщик мусора, либо Сборщик циклов.

В about:configобмен javascript.options.mem.logна true. Теперь уведомления о GC и CC должны быть доступны в консоли ошибок ( Crtl+ Shift+ J). Если их время и продолжительность соответствуют замораживанию, то это ваша проблема.

Когда у меня возникла эта проблема, я исправил ее, взорвав свой профиль Firefox и создав новый с нуля. Профили Firefox имеют тенденцию собирать много грязи с течением времени.

Даже это не идеальное решение. Если вы откроете много вкладок в Firefox (более 100) или множество расширений и оставите Firefox работать несколько дней подряд, это неизбежно замедлится. Вам нужно будет перезапускать Firefox время от времени.

Если вы похожи на меня и у вас есть склонность собирать большую коллекцию вкладок, с которыми вам нужно как-то справиться, в какой-то момент я использую еще один прием - установить browser.sessionstore.max_concurrent_tabs0. Это не позволит Firefox загружать все вкладки вашего сеанса при запуске. Вместо этого он будет загружать их при переключении на них. Я нахожу это, а также случайный перезапуск Firefox значительно снижает нагрузку на большое количество вкладок.


2
Есть плагин Firefox под названием BarTab. Я предполагаю, что это делает то же самое с browser.sessionstore.max_concurrent_tabs
Boris_yo

1
Да, хотя я полагаю, что он не обновлен для Firefox 4.
Мистер Альфа,


1
«max_concurrent_tabs» не отображается в Firefox 40 (2015-08).
Питер Мортенсен

Я думаю, что текущим эквивалентом max_concurrent_tabs является настройка в настройках в разделе «Общие» под названием «Не загружать вкладки, пока они не выбраны».
miyalys

9

В about:config, установите browser.sessionstore.intervalбольшое число (оно должно быть 10,000или 15,000; установите его примерно 600,000).

По сути, это количество миллисекунд между обновлениями Firefox вашего «сохраненного сеанса». Если у вас открыто много вкладок или имеется длинная история посещений (или, как это часто бывает у меня, обеих), это может приводить к смешному объему данных в sessionstore.jsфайл каждые 10 или 15 секунд, что может привести к кратковременно замораживайте или даже замораживайте весь компьютер каждые несколько минут.

Установка этого значения на большое число имеет тот недостаток, что в случае сбоя Firefox вы теряете последние несколько минут истории просмотра при попытке восстановления. По моему мнению, это небольшая цена.

Ваши пики ЦП должны стать гораздо реже.


2
У меня установлен плагин Session Manager. Это также сохраняет сеансы, позволяя улучшить управление и настройку. Что если Firefox и этот плагин обновляют сеансы, вызывая высокую загрузку ЦП и сбои? Есть ли способ отключить функцию обновления сессии Firefox и сохранить Session Manager?
Boris_yo

1
В Firefox 40 он сохраняется в файле "\ sessionstore-backups \ recovery.js" (примечание: в подпапке "sessionstore-backups") вместо "sessionstore.js" (и в предыдущей версии в "\ sessionstore- резервные копии \ recovery.js ").
Питер Мортенсен

1
Хорошо, похоже, что это изменилось с Firefox 33 (2014-06), а не с Firefox 40.
Питер Мортенсен

4

Это не исправит утечки памяти как таковые. Но включение «Не загружать вкладки, пока они не выбраны», по крайней мере, не будет загружать вкладки, пока вы не нажмете на них после перезапуска, что снизит объем памяти.

Я также обнаружил, что использование CCleaner для очистки Firefox «Session» немного помогло. Сначала создайте резервную копию всех открытых вкладок, поскольку при этом удаляется информация о восстановлении сеанса. До запуска CCleaner мой файл sessionstore.js составлял около 800 КБ, но после этого он уменьшился до около 6 КБ.

Более подробную информацию о магазине сессий можно найти в Solved: Firefox зависает каждые 10 секунд, прокрутка - это Jumpy .

Удаление Flashblock устранило мои проблемы с центральным процессором в Firefox. Возможно Flashblock и Adblock Plus или какое-то другое расширение не ладят?

Жизнь слишком коротка, чтобы возиться с Firefox. Я просто экспортировал свои закладки и удалил Firefox, затем удалил все папки Firefox на машине, а затем переустановил Firefox с нуля и восстановил закладки. Теперь он работает быстрее, чем Google Chrome с совершенно новой установкой.


2

Это очень сложно сказать. Это просто общее использование, которое вызывает это, или вы заходите на конкретный сайт? (У нас была проблема, когда браузер со временем набирал память из-за утечки памяти в jQuery ).

Предполагая, что вы используете ОС Microsoft, вы можете попробовать использовать инструмент Process Monitor от Microsoft . Он выплевывает множество сообщений, но вы должны быть в состоянии сузить их до интервала, в котором произошло «зависание», и, возможно, посмотреть, какой процесс выполняет блокировку.


У jQuery может быть утечка памяти? Хммммм
Джефф Ф.

1
Это может случится. Посмотрите этот список заявок на ошибки jQuery: bugs.jquery.com/search?q=leak&go=&ticket=on . Мы столкнулись, потому что мы постоянно нажимали на одну страницу (через AJAX-запрос, запускаемый с интервалом), что вызывало довольно большую утечку.
Джеймс Уайзман

1
Звучит скорее как проблема с браузером, а проблема с jQuary - это то, о чем я говорю, поскольку она не может быть запущена, но в браузере (в большинстве случаев, в любом случае) :) (если while (1 == 1) {} вылетает браузер Я обвиняю браузер: P)
Джефф Ф.

1
Хотя вы и правы, утверждая, что браузер виноват (некоторые ошибки в приведенной выше ссылке были связаны с неспособностью IE должным образом обрабатывать циклические ссылки), есть шаги, которые разработчик может предпринять в своем коде JS для улучшения этих проблем. В C / C ++ вы должны очистить память, выделенную вручную, поскольку для этого нет GC. Если нет, это ошибка в вашем коде или время выполнения? Я бы сказал, что отсутствие учета ограничений вашей среды может рассматриваться как ошибка от вашего имени, и похоже, что именно так и смотрит команда jQuery.
Джеймс Уайзман

1
Ну, это закончилось глупым аргументом: P. JavaScript это не код, это скрипт; Скрипт работает в другой программе. Плохо написанная программа работает сама по себе, поэтому требует правильного написания. Хорошая программа, которая принимает скрипт, предотвратит его взлом. Поэтому, если вы проверите bugzilla, вы увидите, что считается ошибками, связанными с плохо написанным JavaScript, приводящим к сбою Firefox. Эта тема довольно самоуверенная, поэтому я оставлю это на этом! (Первый комментарий был скорее шуткой, поскольку браузер не пропускает jQuery)
Джефф Ф.

0

Если вы этого еще не сделали, вы можете попробовать обновить Firefox до последней версии. Они упорно трудились, чтобы уменьшить эти утечки памяти.


Я всегда обновлялся и проблема осталась. Я предпочитаю жить с Firefox 3.6.17
Boris_yo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.