Не является ли неактивная память пустой тратой ресурсов?


87

Я ищу объяснение использования памяти на моей машине, особенно в свете примера на следующем снимке экрана:

Использование памяти

Я понимаю, что есть Freeи что Activeзначит.
Но каковы значения Wiredи Inactive?

Особенно inactive, почему он использует так много памяти для чего-то, что мы не используем?

Ответы:


142

Неактивная память получила ужасный рэп из-за дерьмового имени. Его следовало бы назвать чем-то вроде «сделай свой Mac действительно быстрым во второй, третий и четвертый раз, когда он выполняет ту же задачу», за исключением того, что это тоже ужасное имя.

Apple переписала монитор активности, когда представила несколько новых функций и добавила сжатую память, поэтому часть этого больше не относится к macOS, которые не отображают «неактивную память», но это все же относится к управлению памятью Mac OS X, как описано в этой документации. версия Activity Monitor: https://support.apple.com/en-us/HT201538

Вот как я объяснил вещи кому-то новичку в концепции виртуальной памяти в OS X:

  • Проводной : система не может работать без этого объема оперативной памяти (никогда не менялась)
  • Активно: программы действительно используют эту память сейчас или в последние несколько секунд
  • Неактивные: вещи, которые программы прочитали с медленного диска или из другого места и сказали, что они больше не нужны. Инженеры знают лучше, вы вернетесь в Facebook через несколько минут или перезапустите Word после выхода из него. То же самое происходит снова и снова на компьютерах.
  • Свободно: полностью израсходованное ОЗУ - системе требуется только один или два МБ свободного места для покрытия запросов на краткосрочное распределение. Для самых больших выделений он просто использует часть неактивного ОЗУ, выделяя его активному / проводному и удаляя информацию о том, что он использовал для хранения.

Проблема возникает, когда Free + Inactive составляет менее чем примерно 1/3 от общего числа, и тогда все становится действительно медленным.

Неактивная память - это бонусная скорость / двойная память. Он служит бесплатным в любой момент, но также делает повторные задачи намного, намного быстрее, если система правильно угадала и сохранила что-то в ОЗУ, что вы будете делать снова. Это быстрее, чем подкачка памяти, поскольку она уже загружена в ОЗУ и ускоряет процесс, когда система виртуальной памяти делает хорошие предположения.

Когда вы задаетесь вопросом, является ли ОЗУ проблемой, вместо того, чтобы рассматривать каждую из 4 категорий (5, если вы считаете активный обмен), вы можете связать W + A как замедление новой программы / задачи и F + I как ускорение новая программа / задача. Чем больше у вас F + I, тем больше новых программ вы можете запустить до того, как ОЗУ будет нуждаться в обмене, чтобы манипулировать выделенной памятью.

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

Вот реальный пример того, как используется неактивная ОЗУ.

  1. Закройте все приложения и убедитесь, что два приложения, которые мы тестируем, не настроены на автоматический запуск при входе в систему.
  2. Перезагрузите свой Mac
  3. Запустите монитор активности и наблюдайте за оперативной памятью
  4. Время, необходимое для запуска приложения A (MS Word будет хорошим выбором)
  5. Выйти
  6. Время, необходимое для запуска приложения B (Adobe тоже что-то подойдет)
  7. Выйти Б
  8. Время, сколько длится второй запуск A
  9. Выйти
  10. Второй запуск Time B
  11. Время А начинается в третий раз, когда Б работает.

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


В вашем случае общее количество проводных и активных означает, что, вероятно, происходит некоторая перестановка на диск, и ваш Mac не так быстр, как мог бы быть, поскольку ваша неактивная оперативная память недостаточно велика для хранения всего, что вам может понадобиться для повторного использования. , Если у вас быстрый SSD-накопитель, это распределение ОЗУ в порядке, и вместо того, чтобы начинать замедляться, если менее половины вашей ОЗУ равно F + I, вы можете сократить объем примерно до 1/4 от общего объема ОЗУ для F + Я раньше не видел заметной медлительности. Эти рекомендации носят общий характер, и вы захотите посмотреть vm_stat 15или какой-то подобный интервал, чтобы гарантировать, что непрерывная и средняя громкость не замедляет работу вашего Mac.


9
Вау, очень полный ответ для новичка, как я. Большое спасибо, очень ценю :)
GusDeCooL

6
Да, я отвечаю за всех - раз и навсегда, люди могут отредактировать это, чтобы сделать его лучше, и вы получите свой ответ. Довольно крутая идея для веб-сайта, куда люди могут приходить и задавать интересные вопросы. :-)
bmike

3
Вау! Прекрасный ответ!
duci9y

3
Я хотел бы, чтобы они объяснили это так в моем классе ОС.
Styfle

2
@cvsguimaraes чистка не мгновенная; chat.stackexchange.com/transcript/message/12107920#12107920
Грэм Перрин

6

Число, которое является наиболее важным при определении того, нагружается ли ваш Mac памятью, является цифрой «Количество страниц». В Activity Monitor в Mavericks это больше не отображается, теперь они отображают информацию в «Swap Used:».

Вывод страниц означает, что ОС определила, что недостаточно ОЗУ для запуска всех запрошенных приложений и процессов. То, что он тогда делает, - это «страницы» на дисковые части памяти, которые он определяет, не используются активно. Это означает, что оперативная память (быстрая) заменяется на память жесткого диска (медленная). Если это часто происходит из-за того, что запущено много приложений, а пользователь переключается между приложениями, тогда будет много выходов страниц и входов страниц.

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


4

Проблема на моем Mac заключается в том, что «неактивная» память никогда не очищается, если я не выполняю ручную очистку в окне команд. Он накапливается и накапливается до тех пор, пока не появится всплывающее окно с указанием убивать приложения. Даже после уничтожения всех моих приложений у меня все еще остается слишком много неактивной памяти, чтобы что-либо запускать. Таким образом, на моем Mac, работающем под управлением последней версии Mountain Lion, неверно, что неактивная память восстанавливается, когда свободной памяти становится мало. Либо у меня где-то есть приложение, которое заблокировало кусок неактивной памяти, которое никогда не освобождается, либо в iOS есть ошибка. (У меня 8 ГБ физической памяти ... этого должно быть достаточно!)


2
Я с тобой, Эрни ... в Mac OS 10.6 и 10.7 на MacBook Pro и Mac Pro, неактивная память всползает, и ОС начинает переставляться (в соответствии с «Page Ins» и «Page Outs») и система будет ползти до остановки. Кажется, что неактивная память никогда не восстанавливается. Я должен использовать «очистку», чтобы восстановить неактивную память и снова активировать мою систему.
Эрик

2
Откуда это всплывающее окно? Какова ситуация с памятью, о которой сообщается, vm_statкогда это происходит? Что делает вас настолько уверенным, что может быть «слишком много» неактивной памяти, чтобы «что-нибудь запустить»? Насколько я понимаю, это все слухи, которые не имеют поддержки в коде, который вы знаете, на самом деле работает в ядре.
Куба Обер

2
Ваше распределение памяти похоже на то, что представил Гас? Здесь мы говорим о гигабайте проводной и гигабайте с половиной активной. Неактивный / свободный рацион выглядит хорошо для меня в этой ситуации. Возможно, вы бы задали второй вопрос, подробно описав ситуацию, в которой вы находитесь, когда все рушится?
bmike

2

Спасибо всем авторам и комментаторам, это была поучительная и полезная тема для меня. Мой недавний опыт может быть полезным для кого-то. Я использую свой Mac Mini с OS X10.8.1 и 16G RAM исключительно для прототипирования программного обеспечения, которое будет работать в другом месте. Я могу заверить вас, что я не буду «возвращаться в Facebook через несколько минут или перезапускать Word после выхода из него» - вместо этого я делаю это на своем MacBook.

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

После нескольких итераций этого процесса свободная память уменьшается до нескольких МБ, неактивная память освобождает еще несколько МБ, а затем, в конце концов, через несколько минут переключения между свободной и неактивной памятью, неактивная память освобождает до нескольких ГБ одновременно. Все так, как описывает @bmike, и vm_stat 15 и монитор активности показывают 0 постраничных выходов.

За исключением, может быть, не совсем. Несколько раз все шло гладко, я ухожу выпить кофе или ужин и не наблюдаю за процессом, а то, что не должно произойти, происходит, и процесс внезапно выбрасывает множество выгрузок страниц и замедляет процесс. Примите во внимание, что, вероятно, проблема заключается в моем дрянном коде, но я бы хотел отключить неактивную память, просто чтобы устранить этот источник изменчивости. Это сломано? Я бы не сказал так вообще, но я бы сказал, что я думаю, что управление памятью не оптимизировано для моего случая использования.


0

Неактивная память используется недавно активными и завершенными приложениями. OS X сохраняет это зарезервированным на тот случай, если пользователь захочет снова открыть программу. В этом случае OS X не нужно перемещать память, что ускоряет производительность. Если вы не откроете программу заново, через некоторое время память неактивного будет освобождена или перемещена. (C)

Эта функция хороша, когда у вас много оперативной памяти, но когда ее нет, это довольно раздражает. На самом деле все дело в яблоке. Когда у вас есть мощный гаджет или Mac, все круто, но когда вы становитесь старше, все функции замедляются.

Поэтому вы должны использовать специальные приемы, чтобы справиться с этим.

Для неактивной памяти есть команда purgeдля ее освобождения.


-3

В основном это сломано. Неактивная ОЗУ должна автоматически «очищаться» при низком уровне свободной ОЗУ. Какой смысл держать оперативную память для ранее открытых приложений, надеясь, что пользователь откроет ее снова? Тот факт, что свободной оперативной памяти мало, указывает на то, что в существующих приложениях ACTIVE может быть недостаточно оперативной памяти, и она заменяется сейчас. Хранить ГБ ОЗУ для закрытых приложений просто глупо. Согласно собственному описанию Apple, неактивная оперативная память должна очищаться или заимствоваться автоматически, когда свободной оперативной памяти недостаточно. Это явно не тот случай.


3
Системы виртуальной памяти тратят большое количество свободной оперативной памяти. Когда программа запрашивает выделение памяти, ядро ​​выделяет больше виртуальной памяти и раздает ее, как конфеты. Только когда программа заполняет эту память фактическими данными, система должна освободить место в ОЗУ для этой операции. Эта «свободная комната» вытягивает из свободной, а затем неактивной памяти - и задержка освобождения неактивной памяти неизмеримо мала. Описанная вами чистка - это именно то, что происходит - просто вы подразумеваете, что система должна выполнять очистку заранее, когда система ленива, и делает это только при необходимости.
bmike

@bmike Но разве это не значит, что если не осталось свободной оперативной памяти и я запустил новое приложение, то неактивная часть оперативной памяти уменьшится, а активная увеличится? Это явно не тот случай, и, по моему опыту, система работает очень медленно, когда не остается свободного барана, несмотря на гигабайты неактивного барана. Похоже, что система предпочитает замену диска, прежде чем подумать о повторном использовании неактивного ОЗУ.
codingFriend1

4
@ codingFriend1 Давайте уточним - сколько бесплатных страниц vm_statвы считаете «больше нет свободной оперативной памяти»? Когда Mac "медленный", на что рассчитывают страница и страница vm_stat 1? Каждый раз, когда я наблюдаю за этим в проблемной системе, мне нравится vm_stat 15запускаться в окне терминала (или входить в файловую систему), чтобы я мог точно знать, что такое пейджинговая активность, когда решаю, если / когда я настрою такие вещи, как пейджер. В этом примере 100 МБ свободной оперативной памяти, поэтому вряд ли даже под давлением подкачки.
bmike

-4

По сути, неактивная память ускоряет открытие ранее закрытых процессов. Если вы обнаружите, что Mac OS занимает слишком много памяти, вам не нужно, как на десятках вкладок, которые вы открывали в Safari или Chrome, просто используйте команду «purge» в Терминале. В OS X Mavericks просто используйте вместо этого «sudo purge» (вам нужно будет ввести свой пароль). Он экономит драгоценные секунды, когда вам нужно снова что-то открыть, но если вы хотите играть в игру с большим объемом ОЗУ или открыть приложение, требующее ОЗУ, я определенно рекомендую использовать команду очистки.


2
Чем это отличается от других ответов?
user151019
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.