Распространенное явление в моем повседневном использовании (и некоторых других согласно различным постам в Интернете) 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
Вот обзор методов, которые были предложены, чтобы помочь до сих пор:
Продувка команда
«Используется для аппроксимации начальных условий загрузки буферным кешем холодного диска для анализа производительности. Это не влияет на анонимную память, выделенную через malloc, vm_allocate и т. Д.».
Это полезно, чтобы предотвратить отключение osx дискового кеша (что смешно, так как в действительности osx делает это в первую очередь), но с недостатком, что дисковый кеш освобождается, что означает, что если кеш диска не собирался быть поменявшись местами, можно было бы просто получить кеш-буфер холодного диска, что, вероятно, отрицательно сказалось на производительности.
Приложение FreeMemory и / или Восстановление прав доступа к диску для принудительного освобождения памяти
Не освобождает память, только перемещает гигабайты содержимого памяти с оперативной памяти на жесткий диск. В конце концов, это вызывает много перестановок, когда я пытаюсь использовать приложения, которые были открыты при освобождении памяти, так как большая часть его виртуальной машины теперь находится в режиме подкачки.
Ускорение выделения подкачки с использованием dynamicpagerwrapper
Кажется, что это хорошая вещь, чтобы ускорить использование подкачки, но не решает проблему подмены osx в первую очередь, пока есть неактивная память.
Отключение подкачки путем отключения динамического пейджера и перезапуска
Это заставит osx не использовать своп к цене зависания системы при использовании всей памяти. Не жизнеспособная альтернатива ...
Отключение свопа с помощью взломанного динамического пейджера
Подобно отключению динамического пейджера выше, некоторые выдержки из комментариев к сообщению в блоге указывают на то, что это не является жизнеспособным решением: «Неактивная память, как обычно, высока». «когда вашей системе не хватает памяти, вся ОС зависает ...», «если вы используете весь объем памяти Mac, машина, скорее всего, зависнет»
Подводя итог, я до сих пор не знаю, как отключить Mac OS X от использования подкачки, когда память все еще неактивна. Если это невозможно, может быть, где-то есть объяснение, почему osx предпочитает выгружать память, которая может быть освобождена из памяти в любое время ?