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

в 10:32, , рубрики: memory leaks, parallels desktop, Блог компании Parallels, браузеры, виртуализация, виртуальная машина, память, метки: , , ,

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, не отсталось ли от них лишнего.

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

Автор: holymay

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js