Как бороться с утечками памяти в виртуальной машине, правильно закрывая браузер

    image
    Один из самых частых вопросов, который задают нам пользователи Parallels Desktop (а также наверняка всех других виртуалок) – как заставить виртуальные машины потреблять меньше памяти. Об этом спрашивает огромное количество людей на форумах и в социальных сетях.
    Поэтому мы всегда смотрим, какие именно программы и технологии требуют больше памяти при работе виртуальной машины в PD. И вот что нашли.

    «Рваная» работа виртуальной машины, ее частое и плотное зависание начинается с момента, когда на хосте запущено слишком много приложений, требующих памяти больше, чем хост физически может предоставить. Кроме того, тормозить может начать и гостевая ОС, если в ней запущено много тяжёлых приложений или даже лишь одно-два, но очень жадных до памяти.

    Универсального совета по сохранению оптимального баланса между гостевой и хостовой памяти, к сожалению, нет. Просто потому, что у людей слишком разные сценарии использования и комбинации работающих в данный момент программ. Например, кто-то в виртуальной машине хочет запустить 3D-игру, в минимальных требованиях которой указано 2 Гб оперативной памяти, при этом на хосте в этот момент ему не нужно ничего, кроме самого решения Parallels Desktop. А кто-то, наоборот, — работает одновременно с браузером и несколькими различными типами документов на хостовой ОС, а виртуальная машина с Windows ему нужна только для небольшого приложения, аналога которого не существует под Mac. Очевидно, что в первом случае человеку нужно разрешить виртуальной машине использовать больше хостовой памяти (не выходя при этом за рамки рекомендованного максимума, конечно же), а во втором случае, наоборот, лучше будет ограничить память гостевой ОС до минимума. (В Parallels Desktop это можно сделать в верхнем меню Virtual Machine, затем Configure, затем General. Но сначала нужно выключить виртуальную машину).

    Главное помнить, что физическая память не бесконечна. Если у человека есть необходимость в постоянном использовании тяжёлых хостовых и гостевых приложений одновременно, и он то и дело сталкивается с тормозами, ему стоит задуматься о том, чтобы добавить в свой Мак ещё пару гигабайт оперативной памяти. Но основная причина нехватки памяти у некоторых пользователей все-таки состоит в том, что они забывают (или не видят необходимости) закрывать приложения, которые им больше не нужны, а сворачивают или вовсе оставляют их окна висеть на заднем плане. Особенно это касается пользователей ноутбуков, наличие аккумулятора в которых позволяет не выключать хост между использованиями. Такие приложения продолжают занимать память. А если в них при этом еще и происходят так называемые утечки памяти (memory leaks), то это ещё хуже сказывается на общей скорости работы системы.

    Утечки, помимо ресурсоемких приложений, провоцируют также и некоторые антивирусы, и расширения различного стороннего софта для браузеров. Но, как выяснилось, больше всего нареканий вызывет Adobe Flash. Именно эта технология неконтролируемо и хаотично пожирает память и при этом обратно ее не освобождает. Мы даже подсчитали: в 99% случаев, когда пользователи Parallels Desktop жаловались на зависания, был виноват именно флеш, а вовсе не виртуальная машина.

    Почему так происходит? Серфить по Интернету любят все, многие посвящают этому делу по нескольку часов в день. А в Интернете очень много сайтов с баннерами, которые работают на флеше (или даже есть веб-ресурсы целиком на флеше, например, флешевые игры или сайты-визитки особо креативных фирм). Человек запускает на своем Mac браузер (Safari) и начинает серфинг, открывая один сайт за другим в разных вкладках (а многие любят это число доводить чуть ли не до пятидесяти).

    Кстати, этим летом в техблоге Gizmodo поставили эксперимент, чтобы проверить, сколько потребляет каждая открытая вкладка (как в Safari, так и в других браузерах), и выяснили, что это 0,19 Ватт. А открытие 100 вкладок даже без какого-либо флеша вообще снижает время автономной работы более чем на час.image


    Под браузер выделяется определенное количество памяти операционной системы. Если долго серфить, то кэш, естественно, переполняется, и данные сбрасываются на жесткий диск в Swap-файл (файл подкачки). А теперь сюрприз: если браузер только сворачивать (а не закрывать его полностью) и оставить его «висеть» там достаточно долго (например, всю рабочую неделю), то в нем накопится огромное количество данных.

    В случае с Flash подобные утечки памяти происходят очень медленно и для пользователя почти не заметно. В итоге за несколько дней накапливается в среднем 3-4 гига. Часть данных Mac OS к этому моменту уже отправила в свой swap-файл. Проблемы начинаются как раз при старте виртуальной машины: MacOS вынуждена искать под новый процесс сразу много памяти. Это ведет к тому, что она вываливает огромный массив данных из кэша в своп – старается освободить память под запуск средства виртуализации и гостевой ОС. В этот момент виртуальная машина пытается считать данные, необходимые для их старта. Все вместе приводит к росту числа случайных обращений к диску, и система начинает «тормозить».

    Поэтому поглядывайте на параметр Swap used в Activity Monitor. Если количество данных там постепенно растет и стало явно больше 1 Гб, то вероятно, что какое-то приложение не отпускает свою память.
    image

    И что же делать? А профилактика конкретно этой проблемы очень простая – периодически нужно закрывать браузер целиком, используя Cmd+Q (а не просто закрывать окошко, кликнув по красному стоп-сигналу в левом верхнем углу).

    Можно применить также еще несколько хинтов для предотвращения утечек. Например, поставить блокировщик рекламы, который избавит от флешевых баннеров, – их сейчас на рынке довольно много – от популярного Adblock (который блокирует рекламу еще до ее загрузки) до PithHelmet и GlimmerBlocker, или что-то типа плагина ClickToFlash, который в Safari блокирует Flash, заменяя его статичными изображениями.

    Во-вторых, хорошо бы удалить различные браузерные расширения, которые также вызывают утечки (например, антивирусов или Skype). В Safari это делается окне настройки (Safari – Preferences – Extensions), там можно как деинсталлировать расширения, так и вообще запретить установку каких-либо add-ons. Только удалить мало – надо еще проверить в папке ~/Library/Safari/Extensions, не отсталось ли от них лишнего.

    Если у вас есть еще какие-то советы по борьбе с утечками памяти, то именно вас мы и ждали в комментариях.
    Parallels
    Мировой лидер на рынке межплатформенных решений

    Comments 27

      0
      Хм, интересно, не знал что flash так течет. CPU грузит — факт, на нетбуке с Linux Mint, когда пара окон и ~10 вкладок открыто, загрузка была под 100%.
        +1
        используя Cmd+Q (а не просто закрывать окошко, кликнув по красному стоп-сигналу в левом верхнем углу)


        Так, я проясните тогда, что делает эта красная кнопка тогда?
          +1
          только закрывает текущее окно
            +1
            Интересно…
            В винде, как я помню, закрытие главного окна приложения фактически означала завершение приложения.
            В линуксах при закрытии окна приложения (по крайней мере все, что использую я) тоже успешно завершаются.
            В андроидах вообще ничего не выгружается при закрытии окна — только если памяти будет мало и сделает это сам андроид без вмешательства юзера.
            А Мак ведет себя как андроид получается?
              0
              Нечто среднее. Если открыть в фотошопе файл и нажать «красную кнопку», то приложение «свернётся», но после разворачивания файла уже не будет.
                +1
                Нет, мак ведет себя как мак :) Выйти из приложения можно нажав command+Q, иначе вы просто закрываете активные окна. Без вашего ведома никакие приложения не закроются
                  0
                  iPhoto, например, закрывается.
                    0
                    да все все, меня уже ниже убедили :)
                • UFO just landed and posted this here
                  0
                  Все верно, закрывает окно, но не приложение. Хотя не все приложения так себя ведут, в основном это касается мультиоконных.
                    +1
                    Хм, я бы скорее сказал что почти все приложения не завершаются по крайной кнопке (если честно, не могу вспомнить приложение которое можно завершить по крестику)
                      0
                      Калькулятор? :-)
                        0
                        А ага, точно:)))) я в спотлайте считаю, никогда им не пользовался :)
                          0
                          О_о Спасибо!
                            0
                            Могу посоветовать взглянуть на Alfred. И приложения быстрее ищет для запуска, и приятные настройки имеет, типа фиксированной раскладки клавиатуры, использование как точки так и запятой в качестве разделителя в калькуляторе, и другие приятные фишки.
                        +2
                        Легко. System Preferences!
                          0
                          iPhoto завершается, а iTunes, например, уже нет. Определяется разработчиком, зависит от задач программы или просто от решения разработчика. Большинство программ не завершаются, поэтому если программа не нужна, то я на автомате просто жму cmd+q вместо похожего cmd+tab.
                    +7
                    Оказывается, я всю свою жизнь закрывал браузер неправильно, как теперь жить?
                      0
                      Точно, у меня на ХР 32 часто падает виртуалка Sun OS 10, 64 бит, особенно когда там броузер и флеш
                      Хотя не уверент что это через оперативку, оперативной памяти хватает
                        0
                        Реквестирую хаб «компьютер для домохозяек», не ожидал увидеть пост о том, как закрывать приложения. Хотя, стоп… Может, средний макоюзер действительно не понимает, что при нажатии на красный крестик программа не закрывается?
                          +1
                          Всю жизнь считал что если закрыты все окна — приложение закрыто. Видать я менее осведомлён, чем средний макоюзер. :)
                            +1
                            В смысле, вы пользуетесь маком, и не знали об этом? Просто я на макоси сидел несколько месяцев (по работе как-то пришлось), так это первая штука, которую мне сказали коллеги, когда проводили ликбез. Типа, «тут тебе не винда, при закрытии окна прога продолжает жить в фоне».
                              0
                              пользовался около месяца, сейчас дуалбутом воткнул Linux и радуюсь логичной жизни.
                                0
                                Да нет, в целом логично разделение окон и программы (процесса). В маке, например, можно полностью закрыть окно браузера со всеми его вкладками, чтобы ничего не висело на экране, на него потом можно переключиться из cmd+tab и создать окно/вкладку сочетанием клавиш (не сильно убедительно, но подобные мелочи достаточно удобны). И я немного ругаюсь про себя, когда в других системах при закрытии окна (или даже при закрытии последней вкладки) вдруг завершается программа, а я ведь только хотел закрыть окно (или все вкладки — удержанием ctrl+w).
                            +1
                            А ведь бывают и «приложения» без окон. они перманентно закрыты? :)
                              0
                              Только они называются не приложениями, а сервисами или демонами (смотря где, но не суть).
                              Приложение по сути подразумевает интерактивное взаимодействие с пользователем, т.е. наличие кнопочки для закрытия ;)
                              Консольные приложения хитрее — они пользуются кнопкой закрытия терминала.

                              Можно конечно рассуждать, что любая программа является приложением и т.д., но тогда вообще надо договориться о терминологии, а в данном контекте все-таки речь идет об интерактивных штуках.
                                +1
                                Консольные приложения хитрее — они пользуются кнопкой закрытия терминала.


                                Ctrl+C, Esq и другие комбинации (зависит от приложения) вполне могут оставить вам терминал для переиспользования. Не нужно его каждый раз убивать. ;)

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