Добей зомби, помоги лисичке


    Браузер Firefox имеет устоявшуюся репутацию агрессивного пожирателя памяти из-за постоянных проблем с утечками. С новым патчем от Kyle Huey эта проблема может быть в основном решена. Но давайте начнем с начала.

    В Firefox память, выделяемая с использованием JavaScript`а разделяется на ячейки (compartments). Грубо говоря, вся память используемая JavaScript`ом из одного источника (например, из одного сайта) выделяется в одной ячейке. Память используемая JavaScript`ом непосредственно Firefox`а тоже занимает одну или несколько ячеек. Использование такого приема улучшает безопасность и локальность памяти.

    Начиная с Firefox 13 можно посмотреть используемые ячейки памяти на страничке “about:compartments”. Вот, например, какие ячейки памяти задействованы, если открыта главная страница хабра.



    Когда вы закрываете страницу, все ассоциированные с ней ячейки должны исчезнуть. Ну, может быть не сразу, а когда сработают сборщик мусора и сборщик циклических ссылок (cycle collector). Иногда, из-за багов в аддонах или самом Firefox`e, ячейки не удаляются и остаются висеть в памяти в качестве зомби-ячеек (zombie compartments). Это и приводит к увеличению объема потребляемой браузером памяти и увеличивает вероятность падения программы. Печально.

    Но на помощь лисоводам уже спешит смелый и добрый Kyle Huey, который написал патч, устраняющий появление зомби-ячеек для большинства ситуаций (патч уже доступен в nightly build`ах Firefox). Применение этого патча снижает потребление памяти в несколько раз (в зависимости от того, сколько конкретно плагинов с утечками вы использовали). Это, наконец-то, делает возможным использование последних версий Firefox на не самых мощных машинах (вроде устройств с полугигабайтом памяти). Но даже если ваша жизнь хороша и у вас 16GB RAM, этот патч все равно ускорит лису, так как сократит частоту запуска сборщика мусора и сборщика циклических ссылок. А эти двое работают в эксклюзивном режиме, заставляя всю программу замирать, пока они не закончат.

    Однако не все так радужно. Патч Кайла устранил множество утечек в аддонах, но открыл утечку в Addon SDK. В версии 1.6.1 это уже поправлено, но, если ваш любимый аддон создан с применением более ранней версии SDK, то есть повод написать письмо разботчикам, чтобы не получилось еще большей утечки как у Wallflower, аддона для удаления кнопок Facebook и “+1”.

    Как можно заметить охота на оставшиеся зомби-ячейки находится в самом разгаре и вы можете в ней поучаствовать. Для этого:
    — Открываем в лисице (более-менее современной версии) страницу about:memory?verbose.
    — Открываем тестируемую страницу с подозрительными скриптами и плагинами и находим, сколько памяти она использует. Например, для главной страницы хабра:

    │ ├───3,579,160 B (05.06%) — compartment(http://habrahabr.ru/)
    │ │ ├──1,642,496 B (02.32%) — gc-heap
    │ │ │ ├────514,680 B (00.73%) — shapes
    │ │ │ │ ├──239,560 B (00.34%) ── tree
    │ │ │ │ ├──230,880 B (00.33%) ── dict
    │ │ │ │ └───44,240 B (00.06%) ── base
    │ │ │ ├────489,120 B (00.69%) — arena
    │ │ │ │ ├──460,712 B (00.65%) ── unused
    │ │ │ │ ├───15,576 B (00.02%) ── padding
    │ │ │ │ └───12,832 B (00.02%) ── headers
    │ │ │ ├────369,104 B (00.52%) — objects
    │ │ │ │ ├──210,656 B (00.30%) ── function
    │ │ │ │ └──158,448 B (00.22%) ── non-function
    │ │ │ ├────166,136 B (00.23%) ── scripts
    │ │ │ ├─────88,608 B (00.13%) ── type-objects
    │ │ │ └─────14,848 B (00.02%) ── strings
    │ │ ├────692,000 B (00.98%) — type-inference
    │ │ │ ├──329,216 B (00.47%) ── script-main
    │ │ │ ├──295,520 B (00.42%) ── object-main
    │ │ │ └───67,264 B (00.10%) ── tables
    │ │ ├────456,328 B (00.64%) ── script-data
    │ │ ├────327,680 B (00.46%) — mjit
    │ │ │ └──327,680 B (00.46%) ── code
    │ │ ├────260,224 B (00.37%) — shapes-extra
    │ │ │ ├──104,992 B (00.15%) ── tree-tables
    │ │ │ ├───97,024 B (00.14%) ── dict-tables
    │ │ │ ├───31,328 B (00.04%) ── tree-shape-kids
    │ │ │ └───26,880 B (00.04%) ── compartment-tables
    │ │ ├────103,440 B (00.15%) — objects
    │ │ │ ├──100,224 B (00.14%) ── slots
    │ │ │ ├────3,008 B (00.00%) ── elements
    │ │ │ └──────208 B (00.00%) ── misc
    │ │ ├─────90,016 B (00.13%) ── analysis-temporary
    │ │ └──────6,976 B (00.01%) ── string-chars

    — Закрываем подозрительную страницу и нажимаем внизу кнопку “Minimize memory usage” (несколько раз для надежности). Это приводит к срабатыванию сборщика мусора и сборщика циклических ссылок и соответствующая ячейка должна исчезнуть. Если этого не происходит, то скорее всего она — зомби.
    — Проверяем через 10-20 минут — некоторые зомби живут какое-то время, а некоторые — бессмертны.
    — Пробуем выяснить какой скрипт или аддон вызывает появление зомби.
    — Постим баг в багзиллу, не забывая добавить в описание “[MemShrink]” и приаттачить вывод about:memory?verbose.

    Удачной охоты на зомби и берегите свои мозги!

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 35

      0
      А с какой версии обещают встроить в FF?
        +6
        Должно попасть в ближайший релиз (то бишь 13-й), если ничего нового плохого не найдут. Ну уж в 14-м должно быть)
          +3
          Хорошо бы =)
          Вообще странно, почему раньше такой штуки не было сделано.
        +11
        Радует меня мозилла. Проснулись и начали по хардкору делать и исправлять. Сижу с версии 3.6, постоянно обновляю и не вижу проблем с быстрым изменением циферок, как некоторые ленивые жопы.
          –2
          А может быть, они раньше тоже по хардкору делали? А быстрое изменение циферок заставляет вас думать, что они просунлись.
            +1
            Может. По ощущениям кажется, что быстрее пошли. Ну, с 4 по 12 версию они исправили всё, что меня бесило в 3.0-3.6.
            +3
            Я не против быстрого изменения циферок, но надо чтобы плагины не отваливались.
            Задолбался я одно время fastdial постоянно обновлять вручную, перед этим немного погуглив, чтобы он работал.
              0
              Стоит около 15 плагинов, подобного замечено не было. Возможно, повезло.
                +1
                С 9 версии (вроде как) не отваливаютсья совсем.
                  0
                  Но были проблемы с при переходе с 3.6 на 4, с 6 на 7. Приходилось каждый раз искать решение проблемы, хотя оно должно просто работать. Это я конкретно про плагин fastdial, а всё из-за того, что разработчик на него забил и плагин оказался не совместим с новыми версиями, благо нашлись добрые люди, которые продолжили его поддержку. С другими плагинами у меня тоже не было проблем, поэтому я особо не страдаю из-за этого, хотя не понимаю разработчиков зачем они это делают, что за фалометрия?
              +12
              Кайл Хуэей?
              Huey обычно произносится как Хьюи.
                +4
                Так лучше звучит:)
                  +36
                  Спасибо Кайлу Хуею
                  +1
                  >— Пробуем выяснить какой скрипт или аддон вызывает появление зомби.
                  А можно детальней как сделать вот этот пункт — к примеру у меня сейчас висит e.mail.ru/cgi-bin/msglist
                  с хорошим деревом в 7М объектов. Какие мои действия?
                    0
                    Ну собственно, отключаем аддоны один за одним и повторяем измерения.
                    Блокируем скрипты один за одним и повторяем измерения.
                    –13
                    Вот еще пользователя, не хватало, заставлять следить за потребляемой памятью браузера.
                      +19
                      Комьюнити должно помогать отлавливать баги а не плакать что все тормозит
                        –5
                        Я про кнопочку “Minimize memory usage”.
                          +4
                          «Minimize memory usage» запускает сборщик мусора и cycle collector прямо сейчас, а не тогда когда решит программа. Это удобно для тестирования. Понятное дело, от пользователя не требуется заглядывать периодически на эту страничку и жать кнопку)
                    • UFO just landed and posted this here
                        –3
                        лиса течёт [x]
                          +6
                          Скачать видео бесплатно без регистрации [х]
                          +1
                          Прямо сейчас посмотрел: у меня лиса с четырьмя вкладками ест памяти в полтора раза меньше, чем хром с тремя вкладками и четырьмя процессами.
                          • UFO just landed and posted this here
                              +3
                              Вы можете видеть, что Firefox приблизился к выполнению этого условия.
                            –1
                            впрочем это не мешает ему жрать памяти больше чем сафари и тормозить.
                            • UFO just landed and posted this here
                                0
                                Может это он себя так на маке ведет, но, реально, раньше было лучше.
                            0
                            В 12 (или 11) версии они хорошо улучшили работу с памятью. Помню еще зимой при активном серфинге потребление памяти постоянно росло и приходилось перезапускать браузер. Теперь же такой проблемы нет — потребление памяти находится на одном уровне (хотя тоже растет, но очень медленно).
                              +1
                              Да, уменьшение потребления памяти — это один приоритетов работы над firefox wiki.mozilla.org/Performance/MemShrink за последний год и они неплохо продвинулись: утечки фисксят, движок javascript стал производительнее и т. д.
                                0
                                Согласен. Лис стал потреблять в разы меньше памяти.
                                0
                                Сам лиса использую при работе, отказался от хрома (несмотря на то что субъективно удобней) из непомерного аппетита к оперативе (на ноуте не увеличить размер ОЗУ), а при серфинге хром использую. В общем когда же хром научат есть поменьше.
                                  –1
                                  Дада, уже писали, и даже RSS на Shrink & Snappy имеем.
                                  Только Мозилла всё больше *т на пользователей.

                                  Херачь как есть, потом создадим проблемный комитет.
                                  ИМО, это их лозунг. Давно на FF сваливать не собираюсь, но позиция их изумляет временами.
                                  И чем дальше, тем чаще.
                                    +2
                                    >как у Wallflower, аддона для удаления кнопок Facebook и “+1”.

                                    Ой, есть такой плагин! Ура-ура, пошел ставить.
                                      0
                                      <hidden for=«google likers»>Во многих отношениях, кстати, лисичка быстрее хрома.<hidden>

                                      Only users with full accounts can post comments. Log in, please.