В интернете есть много тривиальных статей, как можно уменьшить потребление памяти на macOS из серии «выключите ненужные программы, установите The Great Suspender для Google Chrome» и т.д. Если вы перепробовали эти советы и всё равно страдаете от недостатка памяти, то я бы хотел поделиться опытом, как лично я решаю эти проблемы.
Общие советы
Я обязан для начала рассказать про простые способы контролировать потребление памяти на macOS (этот совет годится и в Windows и Linux):
- Откройте «Мониторинг системы», отсортируйте приложения по памяти и перестаньте пользоваться приложениями, которые не нужны вам в данный момент
- Отсортируйте приложения по объему сжатой памяти — если вы найдете часто используемые приложения, то значит в вашей системе совсем не хватает объема ОЗУ
- Вынесите «тяжелые» процессы на отдельные сервера, если это возможно (например, компилируйте Android-приложения на отдельной машине)
Смена браузера
Вы удивитесь, но Google Chrome (и Safari) — не единственные существующие под macOS браузеры. Firefox тоже прекрасно работает, и является одним из очень немногих приложений, которые поддерживают 32-битный режим.
В теории, работа в 32-битном режиме может уменьшить потребление памяти до 2 раз, заодно ограничив браузер 4 Гб памяти сверху (я бы ограничил ещё сильнее, если бы была возможность). В реальности, конечно, разница не такая большая, но она вполне заметна. Ну и сам Firefox экономнее расходует память, в том числе потому, что у него всего 2 процесса — один процесс для UI и второй процесс для содержимого вкладок. Вероятнее всего, со временем это преимущество будет уменьшаться, но на момент написания статьи Firefox в 32-битном режиме потреблял примерно в 2 раза меньше памяти, чем Google Chrome, и отдавал память обратно системе намного охотнее, когда закрывались лишние вкладки.
Избавление от приложений на базе Electron
Если у вас есть приложения на базе Electron, например HipChat или Slack, я очень рекомендую избавиться от них в пользу отдельной браузерной вкладки, поскольку Electron это на самом деле Chromium, а он для поддержания своей работы требует огромные объемы оперативной памяти (500-700 Мб на старте).
Перевод приложений в Low Resolution Mode
Некоторые приложения (например, Telegram) могут потреблять очень много памяти для того, что они делают. Иногда это связано с разрешением экрана. На моем iMac Retina 4K один скриншот экрана будет занимать 4096?2304x3 = 28 Мегабайт оперативной памяти. Если используемый софт кеширует в памяти слишком много участков экрана, то перевод его в Low Resolution Mode (с потерей визуального качества, безусловно) может, в теории, уменьшить потребление памяти в 4 раза. Перевод Telegram в low-res режим снизил на моем компьютере его потребление памяти с 500 мб до 150 мб — разница в 3,3 раза!
Заключение
Эта статья получилась очень короткая, но лишь потому, что лично для меня все эти советы помогли полностью избавиться от «лагов» в работе моего компьютера, связанных с недостатком памяти. У меня всё равно периодически возникают процессы, у которых наблюдается некоторый объем сжатой памяти или даже свопа, но при этом это, обычно, background-демона, которые не влияют на user experience. Если у вас есть возможность поставить в свой компьютер больше 16 Гб памяти, то я бы рекомендовал это сделать, даже если в данный момент вам столько не нужно. На macOS, к сожалению, такая возможность есть только в случае iMac Retina 5K и Mac Pro, и последний явно не стоит своих денег.
Надеюсь, эта статья вам была полезна, буду рад комментариям.
Комментарии (64)
Demon_i
09.04.2017 21:43-17Ёжики кололись, плакали, но продолжали есть кактусы… А не проще-ли поставить на мак винду (ну или линукс), раз уж вы его купили? Для андроид-дева на винде всё есть и отлично работает. А под iOS дев — можно и загрузиться в мак-ос.
youROCK
09.04.2017 21:48Меня, в целом, в macOS и в iMac Retina 4K всё устраивает, кроме небольших тормозов при нехватке памяти и невозможности её проапгрейдить до 32 Гб. Если бы я действительно хотел пользоваться другой ОС, то я бы взял и другое железо, в котором можно иметь больше памяти и более быстрый процессор.
maxlazar
10.04.2017 00:30При аналогичном использовании win так же будет память есть, а то и больше. проверенно уже (
sashabeep
10.04.2017 09:35-3Винда просто умрет при похожих вводных.
У меня, например, Macbook Air с 4Гб оперативки, на 10-ке и 8-ке со сходным железом все будет очень тормозно. Не пробовали — не высказывайтесьDemon_i
10.04.2017 15:29И до кучи. Я сейчас работаю в ремонте. Через меня прошло десятка два маков. Не тянут они. Красивые, модные, но безпонтовые.
sashabeep
10.04.2017 16:45Вариант того, что вы их не умеете использовать — не рассматривается, разумеется :)
У автора заметки конкретно нетипичные для Mac OS задачи и ему надо бы все это делать в линухе
kuznetsovin
10.04.2017 17:40У меня мак 12 года с 16Гб оперативки и подобных проблем не встречал, хотя регулярно юзаю IDE Jetbrains и Chrome и vs code и никаких проблем с производительностью не встречал
ibKpoxa
09.04.2017 21:44+4В теории, работа в 32-битном режиме может уменьшить потребление памяти до 2 раз, заодно ограничив браузер 4 Гб памяти сверху (я бы ограничил ещё сильнее, если бы была возможность).
Разница между 32-битным режимом и 64-битным в длине указателей, которые соответственно имеют размер 32 и 64 бита, а также в выравнивании в памяти, в сумме это никак не может дать экономии в 2 раза, т.к. сами данные меньше не становятся.youROCK
09.04.2017 21:46Поэтому я написал «в теории» :). Если большую часть памяти занимают инты и указатели, которые выросли в 2 раза при переходе на 64-битную платформу, то экономия составит 2 раза. Если хранятся только данные, то экономии не будет никакой. Реальный выигрыш в случае с браузером очень существенен, видимо из-за того, что в том же Javascript всё представлено объектами, на каждый из которых нужно хранить по указателю.
VioletGiraffe
09.04.2017 22:13-1Не знаю, как в других языках, а в С/С++ инты всегда 32-битные.
youROCK
09.04.2017 22:17Это не совсем так. Есть разные модели внедрения 64-битности и одни предполагают 32-битные int и 64-битные long, другие — 64-битные int и long. Подробнее, есть, например, здесь: http://www.unix.org/whitepapers/64bit.html
Насколько я знаю, в винде по умолчанию 64 битные инты, а в *nix-системах — 32-битные int и 64-битные longVioletGiraffe
09.04.2017 23:30+1Ладно, о С говорить не буду потому как не пользуюсь, а вот в С++ во всех известных мне ОС (Windows, Linux, Mac OS, iOS, Android) и со всеми известными мне компиляторами (MS, clang, GCC) тип int имеет размер 4 байта.
youROCK
10.04.2017 00:02Да, вы правы, я перепутал. Всё наоборот — на винде по умолчанию даже long 32-битный. Но есть ЯП, где int все же является 64-битным на 64-битных платформах, например Go.
firegurafiku
10.04.2017 16:50+2Не знаю, как в других языках, а в С/С++ инты всегда 32-битные.
Это самая вопиющая ложь о C и C++, что мне приходилось слышать в этом календарном году. Возможно, вы имели в виду C#, но всё равно, пожалуйста, не делайте так больше.
VioletGiraffe
10.04.2017 17:30Нет, я не имел в виду C#. Потрудитесь доказать своё обвинение. На какой ОС и с каким компилятором std::cout << sizeof(int); выведет число, отличное от 4? Я выше привёл список систем и компиляторов, на которых это именно 4 как в 32-разрядном, так и в 64-разрядном режиме.
int не является memsize_type, если что.mapron
10.04.2017 17:34на 16-битной оси?) в любом случае, слово «всегда» словно красная тряпка для быка) стандарт ничего такого не обещает)
VioletGiraffe
10.04.2017 18:05А я нигде и не ссылаюсь на стандарт, я ссылаюсь на собственный опыт.
firegurafiku
11.04.2017 01:22+2ИМХО, предложения, одновременно содержащие в своём составе слова «C++» и «всегда», должны также содержать ссылку на стандарт. В стандарте C# размер
int
постулируется, но не в C и C++, где мало в чём можно быть уверенным наверняка.
firegurafiku
11.04.2017 01:16+2На какой ОС и с каким компилятором
std::cout << sizeof(int);
выведет число, отличное от 4.К сожалению, ваш вопрос подразумевает наличие заголовочного файла
iostream
(а также операционной системы), поэтому я не могу дать на него эффектный ответ. Однако, например, компиляторы Turbo C++ и Borland C++ в системе DOS или Windows 3.x умеют вstd::cout
и выведут число 2. При желании, можно и сейчас скомпилировать в каком-нибудь DOS-Box.
Раз уж вы ниже обращаетесь к своему опыту, обращусь к своему: доводилось писать прошивки для AVR, где длина
int
равна двум байтам. Да, на большинстве распространённых архитектур используются 32-битные целые, но не всегда — ребята из PVS-studio даже небольшую табличку составили. И пусть суперкомпьютеры Cray едва ли представляют практический интерес, комитет стандартизации C++ помнит о них. Как помнит он и о совсем дикой экзотике.
Кстати, вот цитата из одного ответа по предыдущей ссылке:
CHAR_BIT is 16 bits for 1750a, dsp16xx architectures. CHAR_BIT is 24 bits for dsp56k architecture. CHAR_BIT is 32 bits for c4x architecture.
Насколько я могу судить, на этих платформах
sizeof(int) == 1
. Хотя вряд ли там найдётсяiostream
и компилятор C++, если только вы сами их не напишете.
Suvitruf
10.04.2017 07:12-1Не знаю, как на Mac'е, но на Win тот же Firefox x32 не будет есть больше 3 гиг. Если поставить Firefox x64, то будет. Поэтому, если хотите ограничить использование памяти лисой сверху, то ставьте 32.
Goodkat
10.04.2017 11:28-2На маке файрфоксом не пользуюсь, но на винде он начинает тормозить где-то после 1,2 ГБ использованной оперативки, а к 1,8 ГБ им становится невозможно пользоваться, причём не из-за тормозов, а из-за глюков: начинают теряться разные элементы, не загружаются или не обрабатываются некоторые css- и js-файлы и т.п. — при активной работе прибиваю процесс браузера каждые пару часов.
Удивительно читать про 3 ГБ.
P.S: Да, я веб-разработчик, вкладок отрыто мало, как правило это документация, исходники, phpMyAdmin, StackOverflow, отлаживаемое веб-приложение, ну и всегда включен FireBug.Suvitruf
10.04.2017 11:34-2Мне удивительно читать про 1,2 ГБ. Я как только запуская Firefox, он сразу 1.8 ГБ отжирает.
VanoPupkin
09.04.2017 22:09-24К, 5К — это очень хорошо и задорно, но почему бы Вам не посмотреть на машинки предыдущих поколений + по нужды монитор, и надежней и обгрейду людскому Mac Pro тот подвержен и денег стоит горазда он ниже, состоит из аллюминия корпус его, бесшумно и холодно тело его.
dom1n1k
09.04.2017 22:34+1Ретина — одно из ключевых же преимуществ Мака, странно собственными руками душить его.
youROCK
09.04.2017 22:40Большинство приложений потребляют вполне адекватное количество памяти на ретина-экране. В low-res режиме я лично запускаю буквально 2 приложения, которыми пользуюсь относительно редко, но которые удобно держать запущенными постоянно.
vanburg
10.04.2017 03:50+3Вывод: откажитесь от всего, чем постоянно пользуетесь, и вообще выключите мак от греха подальше. Я все правильно понял?
Не знаю, у меня на 16 гигах рубимайн, плюс андроид студия с эмулятором, плюс слэк, плюс хром с 20 закладками всегда открыты (минимум), тормозов 0, что я делаю не так?samsan
10.04.2017 09:50Может быть просто это не ваш случай, у вас другие вкладки. По работе знаю, что открытая вкладка с сайта госзакупок легко сжирает несколько сот мегабайт оперативки, а открытая одна вкладка с большой таблицей в гугл.докс и гигабайт.… а если их несколько… Правда я про винду, но тут как раз тот случай, когда от используемой ОС мало что зависит.
kuznetsovin
10.04.2017 17:44большой таблицей в гугл.докс
— а не проще это в нормальном редакторе таблиц открыть?samsan
12.04.2017 06:20Иногда нет. Например, если файл редактируют несколько человек одновременно. А покупать Microsoft Share Point или нечто подобное для трех человек… как из пушки по воробьям.
Wannaasbird
10.04.2017 09:50+9Не хватает 16 гб ОЗУ? Вы серьезно? Лаги на MacOS? Вы о чем тут вообще говорите? Я не знаю что нужно делать с памятью в 16 гб чтоб её не хватало. Научите.
alexkunin
10.04.2017 10:35+3Тоже хочу научиться. Докер с запущенными 5-10 контейнерами, PhpStorm с 2-4 постоянно открытыми проектами, DataGrip, сафари с 5-20 вкладками, мелочи вроде скайпа, десятка терминалов и RDP, пара экселек в Pages — МакБук Про 2015-го, 8 гиг оперативки. Вообще никаких проблем. О чем говорит ТС — я не понял, если честно.
skeletor
10.04.2017 10:48+1Без проблем (работаю системным иженером):
— открываем несколько вкладок с автообновлением grpahite (отображение метрик)
— открываем порядка 20-30 вкладок iterm (совсем не удобно каждый раз логинится по ssh)
— открыть систему мониторинга с автообновлением, например, zabbix
— thunderbird (увы, но стандартный mail мне неудобен)
+ по мелочи: slack, safari (с владками), skype, viber, itunes.
Это стандартный набор (без сильных излишеств) для работы. При этом я выключил все проверки автоапдейтов, где только можно.
Хотя, если вы программист и пишите только в одной вкладке sublime то вам возможно и 8 будет много.izzholtik
10.04.2017 11:32+1терминал жрёт оперативную память? :|
youROCK
10.04.2017 11:34Если учесть, что многие терминалы поддерживают unlimited scrollback, автоматическую запись истории с возможностью воспроизвести вывод на любой момент времени в прошлом и т.д., то становится не таким уж смешным тот факт, что терминал тоже может жрать дохрена памяти.
skeletor
10.04.2017 11:37Да, именно так. Но что бы его заставить жрать меньше памяти, пришлось ограничить количество строк при scrollback до 1000. Очень часто этого бывает мало, поэтому даже для локальных действий всё выполняю в screen'e.
hamnsk
10.04.2017 10:17+2ХМ, имею мак с 16 гигами памяти, покупал еще в 12 году. Использую очень активно, ПО практически не закрываю из нагруженного отрыты сразу LightRoom, Phoptoshop, PyCharm, Atom практически не закрываю этот софт. Из браузеров Safari и Chrome + иногда Opera, Firefox в которых тоже открыто не меньше 20 вкладок в каждом. Начинаю испытывать лаги в фотошопе в виде прорисовки экрана часа через 3 активной работы с LR и работы с гигабайтными PSD файлами. Лечиться открыть закрыть PS. Но даже при закрытом софте через 3-4 часа активного ретачинга начинается такой глюк так что открытое ПО не причем. Других багов не наблюдаю. У меня 3 мака все работают одинаково. Может тут все же проблема другая? Например не лицензионное по?
Tabasov
10.04.2017 10:24Air 11" последняя модель перед снятием с продаж. 4гб памяти.
Rails(jetbtains)
Nodejs(vscode)
Safari 10+ открытых вкладок 2-5 с отладчиком
iTunes
Mail
Иногда открыты пакеты от адоба. Но редко когда постоянно
Балуюсь в maya 2016
Вообще проблем с памятью нет. Есть проблемы с нагреванием камня но не с памятью.youROCK
10.04.2017 11:21Как вы понимаете, что у вас нет проблем с памятью? Посмотрите на объем сжатой памяти в «Activity Monitor» — если её там много, то это и есть причина, почему у вас нагревается CPU. Сжатая память позволяет сделать сносной работу на компьютере, на котором не хватает памяти, но первопричиной проблем является именно её недостаток.
yarric
11.04.2017 13:29Так у вас проблема в том, что Mac лагает при таком потреблении памяти или просто в психологическом дискомфорте?
youROCK
12.04.2017 01:03Визуально очень заметно, когда начинает использоваться сжатая память — плавность работы теряется, что лично меня выводит из себя. Вероятно, тех, кто пишет, что у них все ок, это просто не раздражает, как меня.
snobit
10.04.2017 10:54Electron приложения — это шик. Ради интереса ставил себе парочку. Shift — просто Gmail в отдельном окне. GitKraten — аналог SourceTree. Тут и 32 гигов не хватит.
kalbas
10.04.2017 11:35У меня на винде telegram жрет 40мб. И slack в отдельном приложении 100мб. Вот уж макось дает.
imgen
10.04.2017 11:49Ха Ха Ха, slack ест одинаково много на любой системе. Вы смотрите на родительский процесс, который может вообще ничего не весить.
SonicGD
10.04.2017 12:02Вот, слак 120мб суммарно на все процессы.
yarric
10.04.2017 21:37Хм, корпоративный чятик отъедает 120 метров… Кажется скоро будут актуальными реабилитационные курсы по C++ для бывших JavaScript программистов — в конце-концов до физического предела размеров транзисторов осталось не так уж много.
yarric
10.04.2017 21:02-2А вот в MacBook Pro 2016-го года используют быстрые SSD, скорость которых сравнима с первыми DDR-ами.
thinking
11.04.2017 16:40Уже второй ноут Ретина 15 с 16 ОЗУ. За все время проблем не было: Chrome, Slack, Skype, Airmail, Photoshop, Parallels+Win10+VS.NET…
Но последние пару месяцев иногда система стала ставить на паузу приложения и предлагать что-нибудь закрыть. Вроде как виновата свежая версия Хрома.
yah
Это как, так можно?
nobodysfault
да, например с помощью вот этой штуки
https://github.com/gojuno/mainframer/