Есть ли способ заставить OSX использовать больше оперативной памяти и меньше подкачки?


12

Проблема, с которой я сталкиваюсь, заключается в том, что на сервере (и на других компьютерах с OSX) у нас 4 ГБ ОЗУ, но мы обнаруживаем, что OSX использует только 40-60% доступной ОЗУ, а также подкачка 6-7 ГБ. Сервер работает под управлением Apache и MySQL, в то время как другие машины являются настольными компьютерами.

Я сравнивал его использование с аналогичными блоками Linux (аппаратными и программными) и обнаружил, что Linux обычно использует 80-90% ОЗУ и имеет гораздо меньший файл подкачки (2-3 ГБ). Серверы Linux также обычно работают намного быстрее.

Есть ли способ заставить OSX использовать больше или большую часть оперативной памяти перед использованием файла подкачки диска?

В Windows вы можете вообще отключить своп. Есть ли что-то подобное для OSX?


Для пояснения: 1. Является ли узким местом система ВМ? Как и в случае, когда вы видите звезды памяти, есть большое количество, если происходят выгрузки страниц. 2. Где вы получаете информацию о размере Free и VM? Например, размер виртуальной машины, указанный в мониторе активности, не совпадает с размером файла подкачки.
Chealion

У меня нет доказательств того, что проблема связана с системой виртуальных машин (VM или swap), но я знаю, что на рабочем столе у ​​меня 6 ГБ ОЗУ, из которых обычно 2-3 ГБ свободно. Когда я переключаю программы, можно подумать, что это будет очень быстро, потому что все в оперативной памяти, но вместо этого требуется 2-15 секунд, чтобы вернуться к чему-то вроде Illustrator. Я думаю, что подобные вещи происходят на сервере - что-то вроде кэширования для MySQL или временных таблиц. Я использую top, чтобы определить использование VM, RAM и swap. Есть идеи?
Дэррил Хейн

3
Чтобы определить фактическое использование du -sh /var/vmвиртуальной машины, проще всего запустить - при этом он может быть искусственно высоким, если присутствует сон-образ (чаще всего наблюдаемый на ноутбуках). Есть несколько доступных инструментов, которые могут помочь вам определить, вызывает ли замедление vm_statувеличение объема памяти: - особенно вас интересует значение выгрузки страниц - если оно немного увеличивается, то вы знаете, что сильно меняетесь. Для получения дополнительной информации о том, как Apple управляет их памятью: developer.apple.com/documentation/Performance/Conceptual/…
Chealion

Ответы:


17

Самый простой ответ? Нет. Операционная система управляет памятью для пользователя, предоставляя процессу столько памяти, сколько ему требуется, сколько требуется, и не предоставляет много возможностей для изменения работы системы. Это не очень помогает при попытке выяснить, является ли использование памяти частью уравнения относительно того, почему серверы Linux превосходят серверы Mac.

Из-за отсутствия «взлома» в системе виртуальной памяти ваши лучшие варианты - это оценить производительность виртуальной памяти, чтобы увидеть, действительно ли это причина ваших проблем с производительностью - самое основное - это использовать vm_statили использовать, следуя ей. жить, используя, 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 Memory Jargon:

Wired : это относится к коду ядра и тому подобному. Память, которая никогда не должна перемещаться из ОЗУ. Также известен как резидентная память.

Shared : память, которая используется двумя или более процессами. Оба процесса будут показывать этот объем памяти, поэтому он может вводить в заблуждение относительно того, сколько памяти фактически используется.

Real : это «реальное» использование памяти приложением, о котором сообщает task_info () - приблизительный подсчет количества физических страниц текущего процесса. (RSIZE)

Частная : это память, которую процесс использует исключительно самостоятельно, которая используется в резидентной памяти. (RPRVT)

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

Активный : Память в настоящее время помечена как активная и используется ОЗУ.

Неактивно : «Неактивная память больше не используется и была кэширована на диск. Она останется в ОЗУ, пока не понадобится место другому приложению. Если вы (или клиент вашего компьютера) вернетесь, оставьте эту информацию в ОЗУ». к этому позже. " - Справка Mac OS X

Свободно : объем ОЗУ, фактически доступный без каких-либо данных.


Лучшая документация, которую я знаю (и которую смог найти в последующих исследованиях), - это собственная статья Apple об управлении памятью на их веб-сайте для разработчиков.

Другие полезные источники: список рассылки Darwin-dev: [ 1 ], [ 2 ] и старая статья о MacOSXHints . Кроме того, Майк Эш разместил хорошее введение в свой блог.


Может быть возможно (я не пробовал это сделать) отключить систему виртуальной памяти, запустив sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.plistи затем перезапустив ее так, чтобы dynamic_pager (программа, которая фактически выделяет виртуальную память) не запускалась. Однако, поскольку ОС предполагает наличие виртуальной памяти, вы можете столкнуться с проблемами очень и очень быстро. Чтобы загрузить его обратно запустить sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist(при необходимости из однопользовательского режима)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.