Распространенное явление в моем повседневном использовании (и некоторых других согласно различным постам в Интернете) OS X, система, кажется, замедляется всякий раз, когда больше нет "свободной" доступной памяти. Предположительно, это происходит из-за подкачки, так как высокая активность на диске очевидна и что vm_stat сообщает о множестве выгрузок страниц. (Поправь меня от неправильного)
Тем не менее, количество "Неактивных" оперативной памяти обычно составляет около 12,5% -25% от всей доступной памяти (^ 1.), Когда подкачка начинается / происходит / заканчивается.
Согласно http://support.apple.com/kb/ht1342 :
Неактивная память
Эта информация в памяти активно не используется, но недавно использовалась.
Например, если вы используете Почту и затем выходите из нее, ОЗУ, которое использовала Почта, помечается как Неактивная память. Эта неактивная память доступна для использования другим приложением, так же как и Свободная память. Однако если вы откроете Mail до того, как его неактивная память будет использоваться другим приложением, Mail откроется быстрее, потому что его неактивная память преобразуется в активную память вместо загрузки почты с более медленного жесткого диска.
И в соответствии с http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html :
Неактивный список содержит страницы, которые в настоящее время находятся в физической памяти, но к которым недавно не обращались. Эти страницы содержат действительные данные, но могут быть освобождены из памяти в любое время.
Итак, в основном: когда программа завершает работу, ее память становится помеченной как неактивная и должна быть доступна в любое время. Тем не менее, OS X предпочтет начать замену памяти на файл подкачки, а не просто запрашивать эту память всякий раз, когда "свободная" память становится слишком низкой.
Зачем? В чем преимущество такого поведения, скажем, мгновенного освобождения неактивной памяти и даже не касания файла подкачки? Некоторые источники (^ 2.) Указывают, что OS X будет выгружать "неактивную" память для замены перед ее освобождением, но не имеет ли это сейчас смысла, не так ли это, если память может быть освобождена из памяти в любое время? Обмен - это дорого, выпуск - дешево, правда?
Может ли это поведение быть изменено с помощью какого-либо предпочтения или известного хака? (Предпочтительно тот, который вообще не включает отключение swap/dynamic_pager и перезапуск ...)
Я действительно ценю команду очистки , а также концепцию восстановления прав на диск для принудительного освобождения некоторой свободной памяти, но это способы мучительно увеличить объем свободной памяти, чем на самом деле исправить логику принятия решения об обмене / освобождении ...
Кстати, аналогичный вопрос был задан здесь: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ и здесь: http://hintsforums.macworld. .com/showthread.php?t = 87688, но, несмотря на то, что ОП повторно задали основной вопрос, ни один из ответов не дает ответа на него ...
^ 1. ОБНОВЛЕНИЕ 17 марта 2012 С тех пор, как я впервые опубликовал этот вопрос, я перешел с 4 ГБ на 8 ГБ установленного ОЗУ, и проблема остается. Количество "Неактивного" оперативной памяти раньше составляло 0,5–1,0 ГБ, и теперь обычно оно составляет около 1,0–2,0 ГБ, когда перестановка начинается / происходит / заканчивается, то есть кажется, что около 12,5% -25% оперативной памяти сохраняется как неактивный с помощью osx логика ядра
^ 2. Например, https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work- день :
Как только вся ваша память будет использована (свободной памяти будет 0), ОС запишет неактивную память в файл подкачки, чтобы освободить место в активной памяти.
ОБНОВЛЕНИЕ 17 марта 2012
Вот обзор методов, которые были предложены, чтобы помочь до сих пор:
Команда очистки
Msgstr "Используется для аппроксимации начальных условий загрузки с буферным кешем холодного диска для анализа производительности. Это не влияет на анонимную память, выделенную через malloc, vm_allocate и т.д. ".
Это полезно, чтобы предотвратить отключение osx дискового кэша (что смешно, так как в действительности osx делает это в первую очередь), но с недостатком, что дисковый кеш освобождается, что означает, что если кеш диска не собирался поменявшись местами, можно было бы просто получить кеш-буфер холодного диска, что, вероятно, отрицательно сказалось на производительности.
Приложение FreeMemory и / или Восстановление прав доступа к диску для принудительного освобождения памяти
Не освобождает память, только перемещает гигабайты содержимого памяти с оперативной памяти на жесткий диск. В конце концов, это вызывает много перестановок, когда я пытаюсь использовать приложения, которые были открыты при освобождении памяти, так как большая часть его виртуальной машины сейчас находится на свопинге.
Ускорение выделения подкачки с использованием dynamicpagerwrapper
Кажется, что это хорошая вещь, чтобы ускорить использование подкачки, но не решает проблему подмены osx в первую очередь, пока есть неактивная память.
Отключение подкачки путем отключения динамического пейджера и перезапуска
Это заставит osx не использовать своп к цене зависания системы при использовании всей памяти. Не жизнеспособная альтернатива ...
Отключение свопа с помощью взломанного динамического пейджера
Подобно отключению динамического пейджера выше, некоторые выдержки из комментариев к сообщению в блоге указывают на то, что это не жизнеспособное решение: «Неактивная память, как обычно, высока». «когда вашей системе не хватает памяти, вся ОС зависает ...», «если вы используете весь объем памяти Mac, машина, скорее всего, зависнет»
Подводя итог, я до сих пор не знаю, как отключить Mac OS X от использования подкачки, когда память все еще неактивна. Если это невозможно, может быть, по крайней мере, где-то есть объяснение, почему osx предпочитает выгружать память, которая может быть освобождена из памяти в любое время?