Проблема, с которой я столкнулся, связана с сервером (и другими модулями OSX), у нас есть 4 ГБ ОЗУ, но мы обнаруживаем, что OSX использует только 40-60% доступной ОЗУ, а также имеет подкачку 6-7 ГБ. На сервере работают Apache и MySQL, а на других машинах - настольные компьютеры.
Я сравнивал его использование с аналогичными ящиками Linux (аппаратным и программным) и обнаружил, что Linux обычно использует 80-90% оперативной памяти и имеет гораздо меньший файл подкачки (2-3 ГБ). Серверы Linux также обычно работают намного быстрее.
Есть ли способ заставить OSX использовать больше или большую часть ОЗУ перед использованием файла подкачки диска?
В Windows вы можете вообще отключить свопинг. Есть что-то подобное для OSX?
Самый простой ответ? Нет. Операционная система управляет памятью для пользователя, предоставляя процессу столько памяти, сколько он требует, и не дает возможности изменять работу системы. Это не очень помогает в попытках выяснить, является ли использование памяти частью уравнения того, почему серверы Linux превосходят серверы Mac по производительности.
Из-за отсутствия возможности взлома в системе виртуальной памяти лучше всего оценить производительность виртуальной памяти, чтобы увидеть, действительно ли она является причиной проблем с производительностью. Самый простой вариант - использовать vm_stat
или используйте Follow it live, используя vm_stat [number of seconds]
чтобы узнать, сколько страниц выходит. Перемещение неиспользуемых страниц из ОЗУ на жесткий диск обходится гораздо дешевле, чем извлечение страниц с жесткого диска обратно в ОЗУ. В терминах OS X страница означает 4 КБ данных.
Кроме того, 32-битные процессы (например, Illustrator) не могут получить доступ к более чем 4 ГБ, поэтому теоретически возможно иметь 2 ГБ свободного места и для процесса не хватает памяти, если у вас установлено 6 ГБ.
И на вашем рабочем столе, и на серверах я бы запустил vm_stat 2
и проверьте последний столбец - особенно если вы испытываете задержку в несколько секунд при переключении на Illustrator.
Чтобы узнать, насколько велик своп на самом деле, вы можете либо проверить размер свопа в Activity Monitor, либо запустить du -shc /var/vm/swap* | tail -n 1
.
С помощью du -sh /var/vm
есть одно предостережение: на ноутбуках с режимом гибернации (за последние 4 года или новее) может быть sleepimage
примерно размер установленной вами памяти.
Жаргон памяти Mac OS X:
Проводной : Это относится к коду ядра и тому подобному. Память, которую никогда не следует перемещать из ОЗУ. Также известен как резидентная память.
Общий : Память, совместно используемая двумя или более процессами. Оба процесса будут показывать этот объем памяти, поэтому это может немного ввести в заблуждение относительно того, сколько памяти фактически используется.
Реальный : Это «реальное» использование памяти для приложения, о котором сообщает task_info () - приблизительный подсчет количества физических страниц, имеющихся у текущего процесса. (RSIZE)
Частный : Это память, которую процесс использует исключительно сам по себе, которая используется в резидентной памяти. (РПРВТ)
Виртуальный : Общий объем адресного пространства в процессе, которое сопоставлено чему-либо - будь то произвольно большое пространство для переменных или что-то еще - он не соответствует фактическому использованию виртуальной машины. (VSIZE)
Активный : Память в настоящее время помечена как активная и используется ОЗУ.
Неактивный : "Неактивная память больше не используется и была кэширована на диск. Она будет оставаться в ОЗУ до тех пор, пока другое приложение не потребует этого места. Сохранение этой информации в ОЗУ будет в ваших интересах, если вы (или клиент вашего компьютера) вернетесь к это позже ". - Справка Mac OS X
Свободно : Объем оперативной памяти, фактически доступной без каких-либо данных.
Лучшая документация, о которой я знаю (и которую мне удалось найти в ходе последующих исследований), - это собственная документация Apple. Управление памятью статью на их сайте разработчика.
Другие полезные источники: Список рассылки Darwin-dev: [1], [2] и старую статью о MacOSXСоветы. Кроме того, Майк Эш разместил введение хорошего непрофессионала на своем блог
Возможно (я не пробовал) отключить систему виртуальной памяти, запустив sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
а затем перезапуск, чтобы не запускалась dynamic_pager (программа, которая фактически выделяет виртуальную память). Однако, поскольку ОС предполагает наличие виртуальной памяти, вы можете очень и очень быстро столкнуться с проблемами. Чтобы загрузить резервную копию, запустите sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
(при необходимости из однопользовательского режима)