Заголовок может вам показаться странным, если вы не используете macOS, но если вы пользуетесь продуктами экосистемы Apple (особенно ноутбуками или iMac Retina 4K), то в процессе работы можете столкнуться с неприятной проблемой: все необходимые для работы инструменты никак не хотят помещаться в 16 Гб оперативной памяти, и система начинает периодически «тормозить» и использовать большое количество сжатой памяти и свопа.

В интернете есть много тривиальных статей, как можно уменьшить потребление памяти на macOS из серии «выключите ненужные программы, установите The Great Suspender для Google Chrome» и т.д. Если вы перепробовали эти советы и всё равно страдаете от недостатка памяти, то я бы хотел поделиться опытом, как лично я решаю эти проблемы.

Общие советы


Я обязан для начала рассказать про простые способы контролировать потребление памяти на macOS (этот совет годится и в Windows и Linux):

  1. Откройте «Мониторинг системы», отсортируйте приложения по памяти и перестаньте пользоваться приложениями, которые не нужны вам в данный момент
  2. Отсортируйте приложения по объему сжатой памяти — если вы найдете часто используемые приложения, то значит в вашей системе совсем не хватает объема ОЗУ
  3. Вынесите «тяжелые» процессы на отдельные сервера, если это возможно (например, компилируйте 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)


  1. yah
    09.04.2017 21:31
    -6

    компилируйте Android-приложения на отдельной машине

    Это как, так можно?


    1. nobodysfault
      10.04.2017 15:32

      да, например с помощью вот этой штуки
      https://github.com/gojuno/mainframer/


  1. Demon_i
    09.04.2017 21:43
    -17

    Ёжики кололись, плакали, но продолжали есть кактусы… А не проще-ли поставить на мак винду (ну или линукс), раз уж вы его купили? Для андроид-дева на винде всё есть и отлично работает. А под iOS дев — можно и загрузиться в мак-ос.


    1. youROCK
      09.04.2017 21:48

      Меня, в целом, в macOS и в iMac Retina 4K всё устраивает, кроме небольших тормозов при нехватке памяти и невозможности её проапгрейдить до 32 Гб. Если бы я действительно хотел пользоваться другой ОС, то я бы взял и другое железо, в котором можно иметь больше памяти и более быстрый процессор.


    1. maxlazar
      10.04.2017 00:30

      При аналогичном использовании win так же будет память есть, а то и больше. проверенно уже (


    1. sashabeep
      10.04.2017 09:35
      -3

      Винда просто умрет при похожих вводных.
      У меня, например, Macbook Air с 4Гб оперативки, на 10-ке и 8-ке со сходным железом все будет очень тормозно. Не пробовали — не высказывайтесь


      1. Demon_i
        10.04.2017 15:13
        +1

        Пробовал — высказываюсь. Вот винда. 5 гигов. Если iOS в этом размере тесно — то стоит задуматься. И да. Свой эйр с 4 гигами не приплетайте. Речь идет о маке с 16 гигами.


        1. Demon_i
          10.04.2017 15:18
          +1

          Давайте подгрузим ДЕВ image


      1. Demon_i
        10.04.2017 15:29

        И до кучи. Я сейчас работаю в ремонте. Через меня прошло десятка два маков. Не тянут они. Красивые, модные, но безпонтовые.


        1. sashabeep
          10.04.2017 16:45

          Вариант того, что вы их не умеете использовать — не рассматривается, разумеется :)
          У автора заметки конкретно нетипичные для Mac OS задачи и ему надо бы все это делать в линухе


        1. kuznetsovin
          10.04.2017 17:40

          У меня мак 12 года с 16Гб оперативки и подобных проблем не встречал, хотя регулярно юзаю IDE Jetbrains и Chrome и vs code и никаких проблем с производительностью не встречал


  1. ibKpoxa
    09.04.2017 21:44
    +4

    В теории, работа в 32-битном режиме может уменьшить потребление памяти до 2 раз, заодно ограничив браузер 4 Гб памяти сверху (я бы ограничил ещё сильнее, если бы была возможность).


    Разница между 32-битным режимом и 64-битным в длине указателей, которые соответственно имеют размер 32 и 64 бита, а также в выравнивании в памяти, в сумме это никак не может дать экономии в 2 раза, т.к. сами данные меньше не становятся.


    1. youROCK
      09.04.2017 21:46

      Поэтому я написал «в теории» :). Если большую часть памяти занимают инты и указатели, которые выросли в 2 раза при переходе на 64-битную платформу, то экономия составит 2 раза. Если хранятся только данные, то экономии не будет никакой. Реальный выигрыш в случае с браузером очень существенен, видимо из-за того, что в том же Javascript всё представлено объектами, на каждый из которых нужно хранить по указателю.


      1. VioletGiraffe
        09.04.2017 22:13
        -1

        Не знаю, как в других языках, а в С/С++ инты всегда 32-битные.


        1. 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-битные long


          1. VioletGiraffe
            09.04.2017 23:30
            +1

            Ладно, о С говорить не буду потому как не пользуюсь, а вот в С++ во всех известных мне ОС (Windows, Linux, Mac OS, iOS, Android) и со всеми известными мне компиляторами (MS, clang, GCC) тип int имеет размер 4 байта.


            1. youROCK
              10.04.2017 00:02

              Да, вы правы, я перепутал. Всё наоборот — на винде по умолчанию даже long 32-битный. Но есть ЯП, где int все же является 64-битным на 64-битных платформах, например Go.


        1. firegurafiku
          10.04.2017 16:50
          +2

          Не знаю, как в других языках, а в С/С++ инты всегда 32-битные.

          Это самая вопиющая ложь о C и C++, что мне приходилось слышать в этом календарном году. Возможно, вы имели в виду C#, но всё равно, пожалуйста, не делайте так больше.


          1. VioletGiraffe
            10.04.2017 17:30

            Нет, я не имел в виду C#. Потрудитесь доказать своё обвинение. На какой ОС и с каким компилятором std::cout << sizeof(int); выведет число, отличное от 4? Я выше привёл список систем и компиляторов, на которых это именно 4 как в 32-разрядном, так и в 64-разрядном режиме.

            int не является memsize_type, если что.


            1. mapron
              10.04.2017 17:34

              на 16-битной оси?) в любом случае, слово «всегда» словно красная тряпка для быка) стандарт ничего такого не обещает)


              1. VioletGiraffe
                10.04.2017 18:05

                А я нигде и не ссылаюсь на стандарт, я ссылаюсь на собственный опыт.


                1. firegurafiku
                  11.04.2017 01:22
                  +2

                  ИМХО, предложения, одновременно содержащие в своём составе слова «C++» и «всегда», должны также содержать ссылку на стандарт. В стандарте C# размер int постулируется, но не в C и C++, где мало в чём можно быть уверенным наверняка.


            1. 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++, если только вы сами их не напишете.


              1. Wedmer
                11.04.2017 01:25

                Более того, кое где char может быть больше 8 бит и без знака.


    1. Suvitruf
      10.04.2017 07:12
      -1

      Не знаю, как на Mac'е, но на Win тот же Firefox x32 не будет есть больше 3 гиг. Если поставить Firefox x64, то будет. Поэтому, если хотите ограничить использование памяти лисой сверху, то ставьте 32.


      1. Goodkat
        10.04.2017 11:28
        -2

        На маке файрфоксом не пользуюсь, но на винде он начинает тормозить где-то после 1,2 ГБ использованной оперативки, а к 1,8 ГБ им становится невозможно пользоваться, причём не из-за тормозов, а из-за глюков: начинают теряться разные элементы, не загружаются или не обрабатываются некоторые css- и js-файлы и т.п. — при активной работе прибиваю процесс браузера каждые пару часов.

        Удивительно читать про 3 ГБ.

        P.S: Да, я веб-разработчик, вкладок отрыто мало, как правило это документация, исходники, phpMyAdmin, StackOverflow, отлаживаемое веб-приложение, ну и всегда включен FireBug.


        1. Suvitruf
          10.04.2017 11:34
          -2

          Мне удивительно читать про 1,2 ГБ. Я как только запуская Firefox, он сразу 1.8 ГБ отжирает.


  1. JekaMas
    09.04.2017 21:55

    Не понял, какое отношение статья имеет к Go?


    1. youROCK
      09.04.2017 21:57

      Никакого, убрал его из категории Go. Изначально я хотел написать также про Gogland и запуск go-приложений на отдельных серверах, но не стал.


  1. VanoPupkin
    09.04.2017 22:09
    -2

    4К, 5К — это очень хорошо и задорно, но почему бы Вам не посмотреть на машинки предыдущих поколений + по нужды монитор, и надежней и обгрейду людскому Mac Pro тот подвержен и денег стоит горазда он ниже, состоит из аллюминия корпус его, бесшумно и холодно тело его.


  1. dom1n1k
    09.04.2017 22:34
    +1

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


    1. youROCK
      09.04.2017 22:40

      Большинство приложений потребляют вполне адекватное количество памяти на ретина-экране. В low-res режиме я лично запускаю буквально 2 приложения, которыми пользуюсь относительно редко, но которые удобно держать запущенными постоянно.


  1. maxlazar
    10.04.2017 00:28

    Ждем лета — будет 32Gb в MBP )


    1. Goodkat
      10.04.2017 11:22

      Предлагаете автору проапгрейдить память с 16ГБ до 32ГБ за 3000 баксов? :)


  1. vanburg
    10.04.2017 03:50
    +3

    Вывод: откажитесь от всего, чем постоянно пользуетесь, и вообще выключите мак от греха подальше. Я все правильно понял?
    Не знаю, у меня на 16 гигах рубимайн, плюс андроид студия с эмулятором, плюс слэк, плюс хром с 20 закладками всегда открыты (минимум), тормозов 0, что я делаю не так?


    1. samsan
      10.04.2017 09:50

      Может быть просто это не ваш случай, у вас другие вкладки. По работе знаю, что открытая вкладка с сайта госзакупок легко сжирает несколько сот мегабайт оперативки, а открытая одна вкладка с большой таблицей в гугл.докс и гигабайт.… а если их несколько… Правда я про винду, но тут как раз тот случай, когда от используемой ОС мало что зависит.


      1. kuznetsovin
        10.04.2017 17:44

        большой таблицей в гугл.докс
        — а не проще это в нормальном редакторе таблиц открыть?


        1. samsan
          12.04.2017 06:20

          Иногда нет. Например, если файл редактируют несколько человек одновременно. А покупать Microsoft Share Point или нечто подобное для трех человек… как из пушки по воробьям.


  1. Wannaasbird
    10.04.2017 09:50
    +9

    Не хватает 16 гб ОЗУ? Вы серьезно? Лаги на MacOS? Вы о чем тут вообще говорите? Я не знаю что нужно делать с памятью в 16 гб чтоб её не хватало. Научите.


    1. alexkunin
      10.04.2017 10:35
      +3

      Тоже хочу научиться. Докер с запущенными 5-10 контейнерами, PhpStorm с 2-4 постоянно открытыми проектами, DataGrip, сафари с 5-20 вкладками, мелочи вроде скайпа, десятка терминалов и RDP, пара экселек в Pages — МакБук Про 2015-го, 8 гиг оперативки. Вообще никаких проблем. О чем говорит ТС — я не понял, если честно.


    1. skeletor
      10.04.2017 10:48
      +1

      Без проблем (работаю системным иженером):
      — открываем несколько вкладок с автообновлением grpahite (отображение метрик)
      — открываем порядка 20-30 вкладок iterm (совсем не удобно каждый раз логинится по ssh)
      — открыть систему мониторинга с автообновлением, например, zabbix
      — thunderbird (увы, но стандартный mail мне неудобен)

      + по мелочи: slack, safari (с владками), skype, viber, itunes.

      Это стандартный набор (без сильных излишеств) для работы. При этом я выключил все проверки автоапдейтов, где только можно.

      Хотя, если вы программист и пишите только в одной вкладке sublime то вам возможно и 8 будет много.


      1. izzholtik
        10.04.2017 11:32
        +1

        терминал жрёт оперативную память? :|


        1. skeletor
          10.04.2017 11:34

          Да, представьте себе жрёт.


        1. youROCK
          10.04.2017 11:34

          Если учесть, что многие терминалы поддерживают unlimited scrollback, автоматическую запись истории с возможностью воспроизвести вывод на любой момент времени в прошлом и т.д., то становится не таким уж смешным тот факт, что терминал тоже может жрать дохрена памяти.


          1. skeletor
            10.04.2017 11:37

            Да, именно так. Но что бы его заставить жрать меньше памяти, пришлось ограничить количество строк при scrollback до 1000. Очень часто этого бывает мало, поэтому даже для локальных действий всё выполняю в screen'e.


  1. 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 мака все работают одинаково. Может тут все же проблема другая? Например не лицензионное по?


  1. Tabasov
    10.04.2017 10:24

    Air 11" последняя модель перед снятием с продаж. 4гб памяти.

    Rails(jetbtains)
    Nodejs(vscode)
    Safari 10+ открытых вкладок 2-5 с отладчиком
    iTunes
    Mail
    Иногда открыты пакеты от адоба. Но редко когда постоянно

    Балуюсь в maya 2016

    Вообще проблем с памятью нет. Есть проблемы с нагреванием камня но не с памятью.


    1. youROCK
      10.04.2017 11:21

      Как вы понимаете, что у вас нет проблем с памятью? Посмотрите на объем сжатой памяти в «Activity Monitor» — если её там много, то это и есть причина, почему у вас нагревается CPU. Сжатая память позволяет сделать сносной работу на компьютере, на котором не хватает памяти, но первопричиной проблем является именно её недостаток.


      1. yarric
        11.04.2017 13:29

        Так у вас проблема в том, что Mac лагает при таком потреблении памяти или просто в психологическом дискомфорте?


        1. youROCK
          12.04.2017 01:03

          Визуально очень заметно, когда начинает использоваться сжатая память — плавность работы теряется, что лично меня выводит из себя. Вероятно, тех, кто пишет, что у них все ок, это просто не раздражает, как меня.


  1. snobit
    10.04.2017 10:54

    Electron приложения — это шик. Ради интереса ставил себе парочку. Shift — просто Gmail в отдельном окне. GitKraten — аналог SourceTree. Тут и 32 гигов не хватит.

    image
    image


  1. kalbas
    10.04.2017 11:35

    У меня на винде telegram жрет 40мб. И slack в отдельном приложении 100мб. Вот уж макось дает.


    1. imgen
      10.04.2017 11:49

      Ха Ха Ха, slack ест одинаково много на любой системе. Вы смотрите на родительский процесс, который может вообще ничего не весить.


      1. SonicGD
        10.04.2017 12:02

        Вот, слак 120мб суммарно на все процессы.

        image


        1. kalbas
          10.04.2017 12:04

          О чем я собственно и говорил. У топикстартера на старте 500-700 метров жрет.


          1. SonicGD
            10.04.2017 12:08

            Я вас и решил поддержать =)


            1. kalbas
              10.04.2017 12:09

              Я уже потом увидел, что аватарки разные, сорян :)


              1. imgen
                10.04.2017 12:14

                Проблема не в памяти в момент запуска. На Macosx в 3 чатах, через час он начинает жрать уже не 120 мб, а 1-2 гигабайта.


        1. youROCK
          10.04.2017 12:20

          Через 1 час использования становится вот так:


        1. yarric
          10.04.2017 21:37

          Хм, корпоративный чятик отъедает 120 метров… Кажется скоро будут актуальными реабилитационные курсы по C++ для бывших JavaScript программистов — в конце-концов до физического предела размеров транзисторов осталось не так уж много.


      1. kalbas
        10.04.2017 12:03

        48,3 родительский и и 4 дочерних на 53 метра. Если нужно позже могу пруфы скинуть.


        1. youROCK
          10.04.2017 12:10
          -2

          Если бы топик был про Windows, ваши комментарии были бы очень кстати.


  1. yarric
    10.04.2017 21:02
    -2

    А вот в MacBook Pro 2016-го года используют быстрые SSD, скорость которых сравнима с первыми DDR-ами.


  1. thinking
    11.04.2017 16:40

    Уже второй ноут Ретина 15 с 16 ОЗУ. За все время проблем не было: Chrome, Slack, Skype, Airmail, Photoshop, Parallels+Win10+VS.NET…

    Но последние пару месяцев иногда система стала ставить на паузу приложения и предлагать что-нибудь закрыть. Вроде как виновата свежая версия Хрома.