22

Я использую OS X от нескольких месяцев (Lion и теперь Mountain Lion). У меня есть 8 ГБ на моем мини, и почти каждый день он приближается к этому. На машине с Windows 7 с 8 ГБ у меня никогда не было таких проблем. Во всяком случае, я прочитал в сети, что неактивная память - это кэш приложений недавно закрытых программ, который можно использовать для более быстрого повторного открытия.И эта неактивная память может быть передана новому приложению при необходимости. Это не выпущено. Вместо этого OS X начинает обмениваться. Итак, мой вопрос: почему OS X использует swap, когда много "неактивной памяти"? Вот экран, который показывает, что я имею в виду:

Я действительно надеюсь, что есть возможность заставить OS X использовать эти 2,69 ГБ до начала обмена.Я действительно так делаю.

4 ответа4

18

Подмена, по-видимому, произошла, когда неактивные страницы оперативной памяти были активны

(Обновление: как выяснилось в комментарии, это не ваш случай. Так что люди с такой же проблемой могут перейти к горизонтальному правилу.)

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

Почему бы не превентивно менять страницы? Потому что это будет пари против шансов: в долгосрочной перспективе вы проиграете. Давайте подумаем об упрощенном примере: две программы A и B, которые не помещаются в ОЗУ одновременно. Программа A все еще работает, и все выгруженные страницы принадлежат A. Программа B завершила работу, а все неактивные страницы принадлежат B.

Если ядро предварительно меняет страницы А и сразу после:

  • Программа А должна получить доступ к своим страницам -> Вы выиграли - страницы уже находятся в оперативной памяти.
  • Вы снова запускаете B -> Вы теряете - вы "заплатили" за доставку страниц в оперативную память, и теперь вы должны отправить их обратно.
  • Вы запускаете другую программу C -> Вы проигрываете, если A и C не помещаются в ОЗУ одновременно. Если они подходят, вы даже.

Также учтите, что замена (запись на диск) обходится дороже, чем замена (чтение с диска). Что делает эту "ставку" еще более непривлекательной.

Короче говоря: доверяйте своему ядру и не пытайтесь перехитрить его.


Обновление: выясняется, что неактивная память не работает, так как Использование Activity Monitor для чтения системной памяти заставило многих поверить, что она работает. В статье дано правильное определение неактивной памяти:

Эта информация находится в оперативной памяти, но она не используется активно, она использовалась недавно.

Но следующий пример полностью вводит в заблуждение и чрезмерно упрощает (как мой пример, чтобы быть откровенным):

Например, если вы используете Почту и затем выходите из нее, ОЗУ, которое использовала Почта, помечается как Неактивная память. Неактивная память доступна для использования другим приложением, как и Свободная память. Однако если вы откроете Mail до того, как его неактивная память будет использоваться другим приложением, Mail откроется быстрее, потому что ее неактивная память преобразуется в активную память, а не загружается с более медленного диска.

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

Короче говоря, система VM ядра при работе с давлением памяти сканирует используемые страницы и пытается удерживать их в равновесии между активной и неактивной маркировкой. Неактивные страницы сканируются для повторного использования, но помечаются как неактивные. Если они были использованы повторно, они помечаются как активные, и некоторые другие страницы должны перейти из активного в неактивное состояние, чтобы определить, активно ли оно используется. Таким образом, неактивный является неправильным. Это сокращение от «возможно, неактивно, давайте попробуем проверить это».

Как вы обнаружили, внутренний баланс, к которому мы (в данный момент) стремимся, составляет примерно 2/3 активных против 1/3 неактивных ...

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

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

Вывод остается прежним: доверяйте своему ядру и не пытайтесь перехитрить его. :-)

5

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

Попробуйте эти команды.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Затем перезапустите и убедитесь, что процесс dynamic_pager больше не работает.

Убедитесь, что в /private/var/vm/ не было создано никаких файлов подкачки .

Чтобы включить, попробуйте следующие команды:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Вы также можете отключить Spotlight, чтобы освободить больше памяти и снизить активность диска. Следующие команды используются для отключения и включения Spotlight.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
0

Система работает как задумано. Даже когда нет недостатка памяти, может иметь смысл написать некоторые страницы, которые нельзя удалить, но которые недавно не использовались для замены, когда система не занята. Таким образом, если позже возникает нагрузка на память, эти страницы могут быть извлечены из ОЗУ без необходимости сначала записывать их для подкачки, когда система занята.

0

Там не так много, вы можете сделать. Почему это так? Потому что это как OS X работает. Интересная часть - то, как занятая память увеличивается с каждым сном, который получает Mac.

Что ты можешь сделать:

  1. Обновление ОЗУ.
  2. Запустите святую команду « очистки », чтобы очистить большую часть неактивной памяти, когда это необходимо.
  3. Отключить обмен http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .