Nek1t
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору С обновленным профайлером я наконец-то выяснил, откуда растут ноги постоянных микрофризов в Firefox, начиная с очень ранних версий. Пару раз пытался искать причину, но в конце концов просто закрывал на это глаза, потому что было не понятно, как такое анализировать, кроме как запускаться на чистом профиле и наблюдать проблему или копаться в выдаче гугла по запросу "firefox виснет". На нескольких открытых вкладках и при небольшом аптайме браузера залипания занимают несколько миллисекунд и происходят где-то раз в минуту, возможно, многие даже не замечают, хотя это видно на тестах вроде такого. Десяток установленных расширений, несколько десятков открытых вкладок, день аптайма - и подвисания начинают занимать время от 500мс и выше, а это уже заметные рывки при прокрутке страниц, залипание ввода текста и т.д. Оказывается, виноват мозилловский GC (ну и CC, наверное) - сборщик мусора. Убедиться в этом можно, сопоставляя время фризов (хотя бы визуально) и вывод от GC в консоле (CTRL+SHIFT+J), предварительно включив его через javascript.options.mem.log = true. Строчки будут начинаться с GC Sliсe, там же можно глянуть общее время его работы и максимальную задержку одного "слайса". GC вызывается примерно от раза в минуту и чаще - в зависимости от интенсивности использования браузера, при этом полностью подвешивая его, пока не оканчивается цикл сборки. В качестве костыля где-то с 16 версии добавили инкрементный GC, который, грубо говоря, вместо фриза браузера на целую секунду делает несколько подходов подряд по 10мс, поэтому теперь вместо одного большого фриза есть много быстрых, что для меня выглядит практически одинаково. Кроме того, периодически вызывается неинкрементый GC, например, поработавший пару дней FF45 с тремя аддонами и 30 вкладками (за сессию прошла пара сотен вкладок), начал постоянно намертво залипать почти на полторы секунды. Если посмотреть багтрекер, то, оказывается, там есть десяток багов на эту тему, некоторые от 2011 года: https://bugzilla.mozilla.org/show_bug.cgi?id=490122 https://bugzilla.mozilla.org/show_bug.cgi?id=1101111 https://bugzilla.mozilla.org/show_bug.cgi?id=1160228 https://bugzilla.mozilla.org/show_bug.cgi?id=702527 https://bugzilla.mozilla.org/show_bug.cgi?id=1111361 https://bugzilla.mozilla.org/show_bug.cgi?id=656120 Причем большая часть закрыта с замечательным статусом RESOLVED INCOMPLETE. Не понятно, почему эта проблема так слабо освещается и имеет низкий приоритет. Недавно я где-то натыкался на сообщения, что e10s решает этот вопрос, так что, вероятно, на нынешних ESR релизах GC никогда не улучшат (если это вообще возможно без мульти-процессности). В about:config есть много параметров (искать по "mem.gc"), касательно GC, но я не нахожу их нормального описания. Если у кого-то есть идеи, как заставить GC работать намного реже, чем сейчас, поделитесь ими. Интересно, является ли такой агрессивный GC результатом постоянных жалоб на выедание FF памяти (см. баг #656120), так как сейчас и x64 есть, и памяти полно. Лично я готов отдать 10-15ГБ ОЗУ под FF, лишь бы он не вис и жил хотя бы несколько недель с парой сотен вкладок. | Всего записей: 1390 | Зарегистр. 25-10-2006 | Отправлено: 20:10 03-08-2016 | Исправлено: Nek1t, 20:15 03-08-2016 |
|