суббота, 19 ноября 2011 г.

Проблемы со swap в MacOS



“4 Гб памяти в 2011 году - маловато...” - именно так подумал я, прежде чем решил увеличить размер памяти у своего MacBook. Проблем было две: MacOS беспощадно уходила в swap (порой до 7 Гб), мне не хватало памяти для запуска виртуалок ( да, я знаю толк в извращениях ;-) ). Как итог, Eclipse постоянно бегал между swap’ом и активной памятью, безбожно тормозя при очередной “кочевке”. С учетом того, что стоимость плашки в 4Гб порядка 900р - грех не взять.
Нарастив память до 8 Гб, я уже хотел наслаждаться возросшим быстродействием, но не тут то было... Странным образом MacOS все равно уползала в swap. Прежде чем углубляться в детали, проведем небольшой ликбез.
Если заглянуть в Activity Monitor, то можно увидеть 4 типа памяти:
Free
Свободная память. В ней нет ни системного кеша, ни, тем более, данных запущенных программ.
Wired
Критическая информация, находящаяся в памяти: ядро системы, ключевые модули приложений. Все эти ресурсы будут всегда находится в памяти и никогда не переместятся на жесткий диск до момента завершения работы программ, использующих их.
Active memory
Память, используемая запущенными приложениями. Это та часть памяти, отведеной под приложение, которая не попадает под категорию “wired” и не перенесенная в swap.
Inactive memory
Фактически это кеш. В “inactive memory” попадают ресурсы часто используемых приложений после их закрытия. Если вы часто используете Safary, и в какой-то момент закрываете приложение, система поместить ключевые ресурсы приложения в “inactive memory” и при следующем запуске понадобится всего лишь сменить тип этих блоков памяти на “active” или “wired”, вместо загрузки в память с диска.
Теперь вернемся к теме обсуждения. Увеличив память я стал замечать странное поведение системы: иногда, у меня было порядка 3-4 Гб свободной памяти (Free), а иногда, MacOS начинала активно заполнять ее каким-то кешем (Inactive). Самое инересное, что в кеш попадали не останки программ, а сама операционная система активно что-то писала в него через пару минут после старта системы. И такая предусмотрительность была бы полезна, если бы не одно “но”. После того, как почти вся свободная память превращалась в “Inactive”, MacOS начинала активно писать в swap. По стечению каки-то неведомых обстоятельств туда с завидной регулярностью попадали часть Eclipse, XCode и страницы Chrome. Как итог, вышеупомянутые приложения начинали подтормаживать. Пробежавшись по форумам, я понял, что я не единственный “счастливчик”. Некоторые люди грешили на Lion. Разбираться в этих домыслах мне не хотелось, равно как и и отказываться от Lion, поэтому, я просто отключил swap. Делается это следующим образом (в терминале):
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
После выполнения команды перезагрузите систему и возрадуйтесь стабильной и высокой производительности! Если по каким-то причинам вам захочется включить swap вновь, то набираем такую команду:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
По моему мнению, производительность системы возросла значительно, переключение между всеми работающими приложениями происходят молниеносно. Кстати сказать, “похождением” в swap страдает не только MacOS, но и Linux-дистрибутивы. В них отключить swap можно коммандой:

swapoff -a
а включить обратно при помощи:

swapon -a
Дополнительный материал об использовании памяти в MacOS можете посмотреть здесь.
P.S.: кому нужны две плашки памяти SODIMM DDR3 2048MB PC10600 1333MHz ;-)?

3 комментария:

Andrei комментирует...

Наверное если хочется включить нужно написать уже load а не опять unload :) А так полезно, спасибо!

Maxim Gurkin комментирует...

Спасибо, исправил!

Taz комментирует...

внезапно, в линуксах гораздо умнее отключать своп через ядро. например через параметр vm.swapiness

Отправить комментарий