Что это значит, если у меня много «неактивной» памяти в конце рабочего дня?

21

После рабочего дня на моем MacBook Pro под управлением Mac OS X 10.6.5 Activity Monitor показывает, что большая часть 8 ГБ памяти моего компьютера является «неактивной», и только небольшая полоска круговой диаграммы «свободна». Это даже когда я закрыл все приложения, с запущенным только Finder.

Что это значит? «Неактивная» память чем-то занята? Или он действительно доступен для использования приложениями? Спасибо.

HPY
источник

Ответы:

27

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

Конечно, объем оперативной памяти не ограничен, поэтому OS X разделяет объем оперативной памяти на четыре категории: проводная, активная, неактивная и бесплатная. Операционная система требует проводной памяти и никогда не может быть выгружена из памяти. Активная память - это память, используемая в настоящее время запущенными программами. Неактивная память недавно использовалась программами, которые были прерваны (или не использовались в течение длительного времени). Свободная память - это, как следует из названия, оперативная память, которая не используется.

Когда вы запускаете программу, она загружается в активную память. Однако при выходе из программы она не удаляется из ОЗУ; скорее, он столкнулся с неактивной памятью. Вот почему часто быстрее перезапустить программу - она ​​все еще находится в оперативной памяти (попробуйте это с большой программой, такой как Firefox).

Как только вся ваша память будет использована (свободной памяти будет 0), ОС запишет неактивную память в файл подкачки, чтобы освободить место в активной памяти.

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

Короче говоря, на самом деле вам все равно, если у вас мало свободной памяти. Фактически, вы хотите, чтобы она была низкой - свободная память - это потраченная впустую память (так как ОС не использует ее ни для чего).

При изучении того, сколько памяти использует ваш компьютер, вы на самом деле хотите обратить внимание в основном на используемый Swap , который сообщает вам размер файла подкачки виртуальной памяти, и Page ins , который говорит вам, как часто ОС извлекает память из файла подкачки. в активную память.

mipadi
источник
2
Я считаю, что Page outs является лучшим индикатором использования свопа, чем Page ins, потому что Page ins включает в себя как загрузку программ, так и загрузку из файла подкачки.
Гордон Дэвиссон
1
В Activity Monitor размер моей виртуальной машины составляет более 160 ГБ! Есть ли на моем компьютере какой-то файл подкачки?
hpy
1
@penyuan: Нет. Это теоретически, насколько большим может быть файл подкачки , но фактический размер файла подкачки помечен как Swap, используемый в Activity Monitor.
Мипади
1
Неактивная память - отчасти, как вы говорите, хотя, в частности, это кеш файловой системы или библиотек, к которым приложение может повторно обращаться, но также блоки памяти из запущенных в данный момент приложений, которые выделили, но не получили доступ в некоторый период времени (не уверен точной продолжительности времени). Ядро помечает их как неактивные, чтобы расставить приоритеты для подкачки на диск, если объем свободной памяти падает слишком низко.
drfrogsplat
2
@deceze: неактивная память выгружается. Активная память становится неактивной, когда она больше не нужна. Я полагаю, если у вас так мало памяти, что нет места для неактивной памяти, активная память будет выгружена непосредственно на диск, но это особенное обстоятельство. Действительно, файл подкачки теоретически растет бесконечно (до тех пор, пока не останется свободного места на диске), но это тоже крайне редкое явление.
Мипади
9

Скорее всего, это не проблема, и, фактически, потенциально ускоряет работу вашего компьютера.

Все (большинство?) Операционных систем используют дисковый кэш, который хранит некоторые недавно использованные файлы в памяти, что позволяет ускорить повторный доступ к этим файлам. Дисковый кеш в OS X имеет переменный размер и будет отображаться как «Неактивная память».

Если какой-либо программе требуется больше памяти, OS X очистит часть дискового кэша (наименее недавно использованные файлы), чтобы освободить место для запуска / расширения программы.

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

Если это фоновый процесс или приложение, которое расширяет использование памяти (но его страницы помечены как неактивные), вы сможете определить, проверяя любые программы с очень высоким использованием «реальной памяти» в Activity Monitor. Если там нет ничего явно большого (т. Е. Общий объем далек от 8 ГБ), то это будет файловый кеш.

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

(Я считаю, что какое-то время в 10.4 или 10.5 была ошибка, из-за которой она не всегда очень эффективно освобождала эту память и вызывала перестановку, несмотря на большой дисковый кэш, но, по моему опыту, это решается в 10.6).

drfrogsplat
источник
Неактивная память - это фактически ОЗУ, а не память, выгруженная на диск.
Mipadi
3

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

Во всяком случае, это теория, и я считаю, что это правильно. Однако я нашел эту ссылку на утилиту «очистки», которую кто-то написал, потому что они не думали, что неактивная память освобождается достаточно быстро.

Для официальной документации по теме, прочитайте это (и ищите «неактивный»).

Майкл Х.
источник
Для справки, мой MBP в настоящее время говорит: бесплатно 58 МБ, проводные 239 МБ, активные 1,84 ГБ, неактивные 900 МБ - и система работает довольно хорошо.
Майкл Х.
1
Я нахожу команду очистки инструментом отправки бога. Наличие Photoshop + Firefox + Illustrator + Netbean + SmartGit может легко заставить iMac ползти до 4 Гб до смерти. Конечно, основным виновником является Firefox, но если вы хотите немного ускорить процесс, выйдите из Firefox и введите «purge &» Good as new new
Antony
2
Справочная страница Пурджа на самом деле говорит, что она была написана только для очистки дискового кэша (не анонимного mem: stack, heap или copy on write) для анализа производительности (именно потому, что дисковый кэш ускоряет работу системы). Он не был написан для более быстрого выпуска, поскольку его выполнение медленнее, чем ядро, которое динамически восстанавливает память при необходимости. Закрытие приложения полностью удаляет все выделенные объекты mem, и если после этого вы удаляете приложение, загрузка приложения замедляется, см. Linuxatemyram.com/play.html . Я думаю, что в чистке есть что-то психологическое, так же как и принудительное очищение мусора.
Яно
1

Начиная с OS X 10.5, существуют очевидные проблемы с управлением памятью в MAC OS X.

Мне наконец удалось воспроизвести проблемный сценарий, поэтому я запустил тест и записал экран в видео.

Проблема производительности MAC OS X Lion - сломано управление памятью

Я запускаю команду tar + bzip, которая является базовым компонентом Unix, для большого количества файлов изображений в моей папке Pictures /. Непосредственно перед запуском я запускаю команду «purge», чтобы удалить неактивные / кэшированные данные программы.

На видео видно, что объем свободной памяти начинает очень быстро падать, а неактивность постоянно увеличивается. Если вы посмотрите на команду "bsdtar", она займет только фрагмент оперативной памяти, поэтому проблема не в этом процессе. Вы не можете сказать, что это утечка памяти программы, потому что тогда проблема не в неактивном ОЗУ, а в активном / проводном.

Когда объем свободной памяти упал ниже 100 МБ, я запустил некоторые приложения, такие как Safari, iPhoto и MS Word, и вы можете увидеть в видео, что запуск приложения занимает даже минуты, когда обычно (при наличии свободной оперативной памяти) он займет около 3-5 секунд, чтобы загрузить.

Я запускаю тот же сценарий и те же команды на моем Linux Centos 6, никаких проблем! Использование памяти составляет около 10-20 Мб, проблем с кешем / буфером нет.

Управление памятью должно быть сильно нарушено в Mac OS X!

egremyl
источник
1
Часть того, что вы описываете, может послужить основой для другого вопроса, но это не ответ на этот вопрос.
Грэм Перрин
2
Я бы сказал, что ваше описание свободной памяти, быстро сокращающейся до заданного значения, и система, накапливающая все остальное неактивное и проводное ОЗУ как неактивное, указывает на то, что система работает точно так, как задумано. То, что управление памятью в одной ОС отличается от другой, еще не означает, что она сломана. Выбор оптимизации всегда имеет обратную сторону.
bmike
0

Это обсуждение имеет смысл только в том случае, если утверждение о том, что «ваш компьютер будет работать быстрее, когда свободной памяти недостаточно» - было бы верным. Если мой настольный Mac не подключен странно, в тот момент, когда моя свободная память (отслеживаемая) начинает уменьшаться, любая программа, которую я запускаю в это время, начинает замедляться до такой степени, что я ничего не могу сделать, пока она сама не вернется обратно или моим вмешательством в «Свободную память». У меня есть iMac 2118 (2006 или более поздняя версия), объем памяти которого составляет 3 ГБ, поэтому я стараюсь управлять им, когда могу, но это очень расстраивает. Есть предположения?

webbglider
источник