Проблемы с пониманием неактивной памяти в MacOSX

8

Я думал, что понял, как MacOSX управляет памятью, но недавно я был озадачен его производительностью. Вот ситуация:

  1. У меня совершенно новая система Core i7 с 8 ГБ физической памяти под управлением MacOSX 10.6.7. Есть несколько запущенных приложений, регулярно занимающих часть памяти - Safari, Mail, Xcode, Terminal и т. Д.
  2. Мне нужно запустить три 64-битных процесса параллельно, каждый из которых использует около 2000M реальной памяти.
  3. Хотя проводная память остается ниже 1000 МБ (т. Е. У меня доступно более 7 000 МБ для процессов), я наблюдаю интенсивную работу по подкачке страниц, приводящую к очень низкой производительности трех запущенных мной процессов с интенсивным использованием памяти.
  4. По-видимому, у меня не хватает свободной оперативной памяти, так как указанная неактивная память остается около 2500 МБ, а активная память не поднимается выше 5000 МБ.

Может кто-нибудь дать мне понять, почему MacOSX не освобождает неактивную память для процессов, которые в ней нуждаются, вместо этого прибегая к подкачке страниц? Кроме того, есть ли какой-нибудь правильный способ повлиять на управление памятью системой?

Ventzi Zhechev
источник

Ответы:

5

На моей машине я обнаружил, что Mac OS X немного медлителен, чтобы выкладывать нужные вещи.

Всякий раз, когда я делаю что-то особенно требовательное к памяти, я часто закрываю несколько приложений, чтобы выручить это. Safari - это огромная проблема с памятью, если он работал какое-то время и занимает первое место в списке приложений, которые нужно закрыть. В моем случае это было, когда я пытался запустить VMWare Fusion без достаточного объема оперативной памяти.

Вы, наверное, знаете это, но вот несколько ссылок на документацию Apple, в которых описывается использование памяти и виртуальная память в OS X:

http://support.apple.com/kb/ht1342

http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html

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

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

Можно очистить (частично) неактивную память, используя чистка команда. Это может потребоваться установить, установив инструменты CHUD, но вы, возможно, уже установили их. Я не пытался использовать команду очистки, поэтому YMMV ...

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

Mike Meyers
источник
Спасибо! purge Команда именно то, что я искал. Я нашел статьи поддержки в КБ Apple, но они не были особенно полезны.
Ventzi Zhechev
1

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

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

jhfrontz
источник