Зачем мне отключать файл подкачки в Mac OS X?

Я наткнулся на ветку об установке SSD-накопителя в MacBook Pro.
Кто-то в комментариях также рекомендовал отключить файл подкачки, но не сказал, почему:

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

Интересно, зачем отключать файл подкачки в Mac OS X.
Повышает ли это производительность? Стабильность?
Есть недостатки?

Наконец, есть ли смысл отключать файл подкачки, если SSD не используется?

Менее осведомленные часто отключают его, потому что они слышали в каком-то блоге, что производительность взлетела до небес. Твердотельные накопители также представляют собой хороший испытательный стенд, потому что они по своей природе быстрые. Не делай этого. Это снизит стабильность и со временем приведет к катастрофическим последствиям. По сей день я не видел никаких реальных данных (достоверных и достоверных), показывающих увеличение производительности. И это критический компонент ОС, независимо от того, есть ли у вас 2 ГБ или ОЗУ или 120.
Какие катастрофические последствия? Просто любопытно... кажется, моя машина (MacBook Pro 4 ГБ) стала намного быстрее. Например, когда я открываю новые окна терминала, больше нет блокировки... это происходит мгновенно, хотя раньше это занимало несколько секунд. И я смог открыть в два раза больше приложений, чем обычно, и ничего плохого не произошло.
Orange80: Обычной причиной медленных окон терминала является процесс входа в систему, который ищет предыдущий вход в систему, что может быть исправлено с помощью hushlogin: apple.stackexchange.com/a/54167/22570 -- возможно, вы перезагрузились после изменения настроек подкачки? ? Нет никаких причин, по которым скорость окна терминала может быть улучшена за счет удаления свопа.
Я понимаю, что с небольшим объемом SSD вы можете захотеть освободить место. Но что касается производительности, SSD намного быстрее, чем HD, поэтому я не вижу, как отключение подкачки в ОС на основе SSD действительно улучшит производительность. Есть ли опыт в этом? Спасибо.
В Super User с принятым ответом: отключить dynamic_pager Mac? (2012-04-27)
Я хочу отключить своп, потому что хочу защитить свой ssd от слишком частой записи.

Ответы (14)

интересно, почему нужно отключить файл подкачки в Mac OS X. Повышает ли это производительность? Стабильность? Есть недостатки?

Я предполагаю, что люди сделали бы это для накопителя SSD, потому что у этих накопителей не такой же срок службы, как у стандартных магнитных вращающихся дисков. Существует более ограниченное количество циклов записи, поэтому, предположительно, их использование с файлом подкачки израсходует эти циклы быстрее.

Наконец, есть ли смысл отключать файл подкачки, если SSD не используется?

Если у вас много оперативной памяти, это, возможно, повысит производительность, но в целом это не очень хорошая идея . Если вы столкнетесь с потолком памяти, все пойдет не так.

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

Система виртуальной памяти Mac очень ленива в том смысле, что она создает физические файлы подкачки только тогда, когда пришло время выгрузить фактическую память. Какое бы ускорение вы ни увидели, если вам не нужно было откладывать что-либо, чтобы приспособиться к записи в своп, оно почти наверняка будет компенсировано предыдущим приростом скорости благодаря тому, что своп был доступен в первую очередь. Наличие подкачки делает Mac быстрее. Остальная часть ответа на месте - красиво сделано!
Мои машины с Windows работают намного быстрее без файла подкачки. У меня 4 Гб памяти. Я обязательно сделаю это на своем компьютере Mac.
@geotavros Система виртуальной памяти в Mac OS X работает не так, как в Windows. Поверьте мне, с 4 ГБ памяти ваш Mac будет работать быстрее с включенной виртуальной памятью. Отключение виртуальной машины вызовет только головную боль и нестабильность системы.
К вашему сведению, современный твердотельный накопитель с выравниванием записи и приличной емкостью (128 ГБ), на который выполняется непрерывная запись, будет иметь предел цикла записи, измеряемый веками. Это было разумным опасением в 2000 году с маленькими примитивными твердотельными накопителями, но не сейчас.
Для MacBookPro5,2 с 8 ГБ памяти улучшение производительности является значительным. Для Snow Leopard или Lion в VirtualBoxVM улучшение поразительно. Во всех трех случаях ОС, похоже, использует память таким образом, чтобы свести к минимуму риск достижения «предела» (где все фактически останавливается), но этот риск остается, поэтому разумно наблюдать за использованием в мониторе активности.
Для сведения ВМ (или виртуальную память) не следует путать с файлом подкачки. Windows, OS X, *BSD, Linux, многие Unix используют виртуальную память. Обычно архитектура этих операционных систем предоставляет виртуальную машину для каждого процесса, процесс выделяет память в этой области, и ОС заботится о том, чтобы поместить эту выделенную память в физическую оперативную память или подкачать, как сочтет ОС. Наличие или отсутствие свопа может так или иначе изменить производительность по различным критериям (скорость, отзывчивость и т. д.), это будет зависеть от загруженности каждого из нас. Как говорят англичане: ваш пробег может отличаться! И сильно в этом случае.

Причина, по которой они отключили файл подкачки, вероятно, связана с паранойей по поводу того, что SSD имеют максимальное количество операций записи на блок. Файлы подкачки могут часто записываться, что может привести к фрагментации диска (а также к фрагментации файловой системы) и, в конечном итоге, к более раннему отказу диска.

Тем не менее, это определенно случай преждевременной оптимизации. Это почти всегда УЖАСНАЯ , УЖАСНАЯ идея отключить файл подкачки. Файл подкачки нужен, когда запущенные программы потребляют больше памяти, чем физически установлено. Если вы отключите его, вы, возможно, не сможете запускать столько программ одновременно (и ограничение намного ниже, чем вы ожидаете), или у вас могут возникнуть проблемы (например, зависание и необходимость полной перезагрузки компьютера) при у тебя закончилась память.

Последнее я испытал (с включенным файлом подкачки) при нехватке места на диске. У меня был диск на 120 гигов со свободными ~3 гигабайтами. Во время игры в Civilization IV (большая полноэкранная игра) в системе закончилось место на жестком диске (свободно ~ 50 МБ) и появилось окно «Убить приложения сейчас». Это скрывалось за полноэкранной игрой, поэтому система просто зависла. Если бы я не смог войти по ssh с другого Mac, чтобы удаленно закрыть несколько приложений, мне пришлось бы удерживать кнопку питания.

Я хотел бы повторить, какая это плохая идея. Своп используется, даже если у вас 16 ГБ оперативной памяти. Не так уж много, но чуть-чуть уже записано в своп. Всегда. Это защита. И хотя ОС может работать без него, вы не можете быть уверены, как ведут себя сторонние приложения. HD получить записаны. Это факт жизни. И нет, прироста производительности в реальном мире не будет. Это плацебо.
@cksum В некоторых конкретных сценариях сервера системные администраторы отключают файл подкачки, потому что он ускоряет эту конкретную конфигурацию, но они не делают этого без тестирования, чтобы убедиться, что он (а) не исчерпает память и (б ) это на самом деле быстрее. Но это сервер, которым управляют профессионалы: на потребительской машине он никогда не понадобится.
@cksum Я мог бы согласиться с вашим первым предложением, вы правы со вторым, третьим и четвертым, но остальное - чепуха. ОС не заменяется на «защиту», ОС заменяется, чтобы сделать больше доступной памяти для активного процесса, которому это потребуется, или для ускорения ввода-вывода за счет буферизации данных, поэтому в ОЗУ может быть освобождена неактивная память. Когда вы разрабатываете приложение, вы запрашиваете память у ОС, эта память является частью использования вашей виртуальной памяти, как разработчик или приложение, вы не знаете, поместила ли ОС эту память или ее часть в физическую оперативную память или подкачку. (продолжение следует)
Поэтому, если стороннее приложение запрашивает больше памяти, чем доступно, ОС выдаст ошибку. Это не зависит от того, есть ли своп или нет. Наличие свопа повысит лимит, вот и все. Что касается производительности, если у вас 2 пользователя вошли в систему, если активный пользователь использует видеоредактор с огромными файлами, ОС может начать помещать страницы памяти неактивного пользователя в своп, чтобы ускорить задачи, выполняемые активным пользователем. В этом случае вы получаете лучшую производительность с точки зрения скорости. Однако переключение на другого пользователя будет медленнее, ОС должна прочитать своп. Это не плацебо!
@Huygens «Наличие свопа повысит предел, вот и все». Вы имеете в виду что-то вроде защиты? «ускорить ввод-вывод за счет буферизации данных» Swap не используется для ускорения чего-либо. Оперативная память есть и всегда была быстрее, чем жесткий диск, твердотельный накопитель или жесткий диск. Подкачка используется, когда больше нет оперативной памяти для выделения данному процессу. Это запасной вариант... защита от полного исчерпания памяти для выделения. Вот и все. Там нет ничего больше, чем это.
@cksum Я знаю, и ты неправильно понял мой комментарий. Освобождая оперативную память (подгружая часть ее в подкачку), ОС получает больше места для буфера и кеша, что часто, но не всегда может ускорить ввод-вывод. Наличие более высокого предела означает, что вместо предела 2 ГБ (потому что у вас 2 ГБ ОЗУ) он будет превышать 4, 12 или более ГБ, потому что у вас есть своп. Таким образом, наличие свопа позволяет запускать больше параллельных приложений. Но как только вы достигаете предела, результат один и тот же с свопом или без него: приложения становятся нестабильными! Сделать дверь шире — это не создать защиту! Мы можем поболтать, чтобы уточнить наши взгляды.
@Huygens Однако в случае подкачки доступный размер дополнительного пространства памяти — это оставшееся пространство на загрузочном жестком диске, которое обычно довольно велико. И тогда да, система рухнет. У меня такое было.
@CajunLuke В OS X это может быть полная файловая система, которая может быть проблемой для файлов пользователей, некоторые файлы могут оказаться обнуленными из-за плохо написанного приложения. В другой системе файл либо ограничен по размеру, либо использует выделенные разделы. Я имею в виду, что если бы у меня было 300 ГБ свободного места на моем диске, я бы счел это огромной ошибкой, если ОС пытается заполнить это с помощью подкачки ;-) Тем более, что это означает, что происходит что-то ужасно неправильное! :)
Я однажды (в линуксе) забыл при настройке поставить раздел подкачки. Когда зависал, то думал, что это баг ядра - оказалось нехватка памяти подкачки при игре в майнкрафт. использовать своп.

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

Причина, по которой вы можете отключить подкачку, заключается в том, что система может работать на носителях только для чтения, таких как компакт-диск, DVD, заблокированный сетевой образ с использованием NetBoot или USB-брелок только для чтения, такой как новый установщик Lion или брелок восстановления, который поставляется с некоторыми компьютерами Mac без оптических диски.

Наличие виртуальной памяти означает, что система может работать значительно быстрее и использовать меньше оперативной памяти, когда многие программы используют один и тот же общий библиотечный код. Каждая программа думает , что у нее есть частная копия всего необходимого ей кода, но когда существует виртуальная память, у системы есть хороший способ сопоставить одну и ту же физическую память с разными программами.

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

Если у вас есть резервная копия и время для экспериментов, почему бы не отключить ее и не посмотреть, как изменится ваш опыт.

Я бы сохранил свой обмен, даже если бы точно знал, что должен ежегодно платить за новый диск. Скорость, которую дает мне своп, ОГРОМНА. Это не всегда так, а в периоды, когда система трещит или листается - у вас может быть наоборот. Многие люди предпочитают работать без подкачки, чтобы получить ошибку выделения памяти, а не позволить своему Mac начать пейджинг, поскольку это может замедлить работу машины, когда что-то не работает гладко.

Ваш случай с SSD может быть другим, поэтому сообщите нам, если попробуете.

Я нахожу наоборот, огромное ускорение , когда dynamic_pager отключен . На снимке экрана, который сейчас находится на сайте apple.stackexchange.com/a/60661/8546 , показаны размер виртуальной памяти и количество страниц, измеренные, когда этот демон отключен (пока файлы подкачки не используются).
Что именно измеряется для определения ускорения? (Или вы видите отсутствие лагов или задержек в пользовательском интерфейсе или что-то еще, что нелегко измерить или измерить?)
Без измерения: с Lion большинство вещей казалось заметно быстрее — достаточно, чтобы я использовал слово « огромный » . Совсем недавно: 10.8 в VirtualBoxVM, например, для входа в систему и возобновления работы Activity Monitor требуется шестнадцать секунд с dynamic_pager, двенадцать секунд без. Для более широкого и взвешенного сравнения мы можем использовать Phoronix Test Suite или Geekbench .

Я буду скептиком: я отключил подкачку на своем unibody macbook pro конца 2008 года, и это заметно улучшило производительность: меньше ожидания, более быстрое переключение между приложениями.

Имейте в виду, я слежу за своей свободной памятью, и у меня установлено 6 ГБ. Несколько раз, когда я достигал предела памяти, система зависала :-D

На моем новом MacBook Air я бы и не подумал об отключении свопа, он и так быстрый, когда он включен, и для начала у него всего 4 ГБ.

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

Удивительно иметь реальный опыт, где это работало. Каково было обязательство по ОЗУ на машине, когда подкачка была отключена? Что произошло, когда вы открыли больше приложений, чем поместилось в оперативной памяти? Сколько у вас было оперативной памяти и какие приложения могли бы комфортно работать в этом пространстве без ошибок?
@bmike, не уверен, система вылетает :-D, 6гб и все, чем я пользуюсь :). Aperture или XCode — настоящие пожиратели памяти, и иногда они могут опрокинуть систему, но Skype, Mail, Adium, Safari, Chrome, iTunes и OmniFocus отлично подходят…

Мой опыт аналогичен опыту w00t. Я отключил файл подкачки на SL и Lion, потому что у меня работает увеличение производительности. Использование проводной связи выходит из-под контроля через неделю или около того, но простая перезагрузка решает эту проблему. У меня не SSD, а медленный диск на 5400 об/мин. Срок службы SSD на самом деле не так плох, как люди пытаются его представить. Если вы делаете это просто потому, что боитесь износа SSD, см.: http://www.anandtech.com/show/4159/ocz-vertex-3-pro-preview-the-first-sf2500- ssd/2 и http://communities.intel.com/thread/21717?tstart=0 Intel оценивает свои диски более 20 ГБ в день, каждый день, на срок до 5 лет на диске емкостью 80 ГБ. Диски большего размера прослужат еще дольше. Средний пользователь не использует даже 10 ГБ в день.

Я обязательно отслеживаю использование памяти объемом 4 ГБ с помощью меню iStat и использую скрипт Automator с командой bash «purge» (требуется установка Xcode), чтобы очищать неактивную память и часто открывать больше свободной памяти. Несколько раз, когда у меня были приложения с утечками памяти, они использовали всю оперативную память, и мне приходилось выполнять полный сброс. Редкие случаи, когда это происходит, и скорость в целом делают целесообразным держать файл подкачки отключенным для меня. Я понимаю, что из-за этого у меня не может быть открыто столько приложений одновременно, как утверждают другие, но я могу с этим работать.

В Memory Scope есть возможность автоматической очистки. (если включен dynamic_pager, я запрещаю очистку.)

Просто добавлю свои 2 цента для тех, кто хочет отключить своп ИЗ-ЗА маленьких SSD: спящий образ использует гораздо больше места на диске.

И для тех, кто обеспокоен ограниченным сроком службы SSD (особенно для тех, у кого есть MBA и встроенные чипы SSD, которые НЕ МОГУТ быть заменены), если ваш компьютер спит много раз в день, перезапись образа сна может быть проблемой. Мой ноутбук легко спит полдюжины раз в день. Это ежедневно записывает 48 ГБ данных на мой SSD.

В каждом случае решение состоит в том, чтобы отключить режим гибернации, а затем удалить файл образа сна, размер которого равен установленной оперативной памяти (в моем случае — 8 ГБ).

Побочный риск: если ваша батарея разрядится, пока ваш ноутбук спит, ваше текущее состояние будет потеряно. Это будет эквивалентно принудительному жесткому перезапуску. Никакого физического вреда ноутбуку, только потеря производительности. Если вы отключите гибернацию, ваша батарея разрядится и не сможет заряжаться, просто держите под рукой код, чтобы включить гибернацию!

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

 sudo pmset -a hibernatemode 0

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

 sudo pmset -a hibernatemode 3

Чтобы удалить последний образ сна, чтобы освободить место на SSD/HDD (имеет смысл только в том случае, если вы отключите спящий режим, иначе новый образ займет это место в следующий раз, когда ваш компьютер спит):

 sudo rm -rf /var/vm/sleepimage

Источник: man pmset

Отключение подкачки действительно увеличивает производительность. Например, я регулярно использую Aperture, и когда объем подкачки увеличивается, производительность ухудшается, а когда она выходит за пределы 1Gb, мне приходится перезагружать ОС, чтобы очистить ее и восстановить производительность. Примечание: машина имеет 6 ГБ оперативной памяти, и НЕ вся она занята, около 3 ГБ свободно, но 1 ГБ подкачки значительно снижает производительность.

Я отключал подкачку на машинах много лет, как в OS X, так и в других вариантах UNIX.

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

Мой iMac имеет 12 ГБ, и с отключенным свопом у меня почти всегда есть 4 ГБ свободных, даже если открыто несколько инструментов разработки, приложений, браузеров и т. Д.

Какой инструмент памяти вы используете?

Основная причина отключения файла подкачки — не скорость, а место на диске.

Если кто-то является пользователем, который обычно работает в пределах 5 ГБ от полного диска, отключение подкачки остановит постоянное нытье о нехватке места; Я обычно получаю файл подкачки размером 4+ ГБ при обычном просмотре.

Улучшение скорости поразительно на старых машинах; это не так впечатляет на современных машинах, оснащенных SSD. (В OSX 10.0 на iMac использование виртуальной памяти вдвое уменьшило скорость многих операций, включая копирование файлов между дисками).

Это больше похоже на ремонт клаксона, потому что тормоза не работают. Если диск слишком заполнен, снимите с него часть данных.
@Tetsujin Самый большой файл на этом диске БЫЛ файлом подкачки.
моя точка зрения остается в силе. Меньше данных, больший диск или больше оперативной памяти, и вам не нужно.

Повторяющийся шаблон здесь таков:

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

Те, кто НЕ отключил пространство подкачки, уверены, что это не сработает, и случится что-то ужасное, и горячо советуют этого не делать.

Это связано просто с двумя вещами:

  1. Устаревшие представления о дефиците и дороговизне физической оперативной памяти, которые уже не актуальны.
  2. Очень плохой механизм подкачки в MacOS, вызывающий использование файлов подкачки при достаточном объеме физической памяти.
Если бы пространство подкачки использовалось ТОЛЬКО при необходимости, то было бы здорово. Однако это не так. Я запускаю виртуальные машины 2 ГБ и 4 ГБ на своей MacOS. Если у меня есть 1,6 ГБ свободной оперативной памяти, я смогу запустить виртуальную машину объемом 1 ГБ (или другую программу), но не могу, потому что ОС начинает подкачивать ее. В результате я могу использовать только около 85-90% оперативной памяти. Если я хочу получить доступ ко ВСЕЙ оперативной памяти, мне нужно отключить пейджинг. Я делаю это на всех своих компьютерах с Windows и хотел бы сделать то же самое на своем MacOS. Если программе не хватает ОЗУ, то она завершится ошибкой. Это то, что я хочу, чтобы произошло. Мне не нужны другие работающие приложения
YMMV. Я больше не отключаю подкачку, так как не обнаружил, что она помогает повысить производительность на современных машинах с загруженной оперативной памятью. Я использовал в прошлом, поскольку это действительно помогало в старые недобрые времена. В настоящее время я не только не вижу никакого изменения производительности при отключении подкачки, но и вижу значительно возросшую нестабильность приложений.
Нежелательным будет то, что человек забудет, что не может запустить другую программу, и со временем машина выйдет из строя из-за ошибки нехватки памяти. Будет ли это ужасно, смешно или поучительно, зависит от времени, частоты резервного копирования и терпимости к задержкам.

Просто личный опыт.

Memory Amount    |
 4 GB            | Don't disable it, Mountain Lion itself boots with about 1 GB.
 8 GB            | Do if you don't run apps that requires more than 1 GB of memory, in short, virtualization software, Photoshop, and stuff.
16 GB or more    | Do it! Even Xcode or Final Cut won't use more than 4 GB of memory, at least as I've seen. Just don't run too many virtual machines though.

Небольшое примечание: если ваш Mac использует встроенную графику, его память используется совместно с вашей основной памятью с помощью kernel_task. Таким образом, вам придется вычесть эту сумму из общей полезной суммы.

Пользователи SSD, приятно иметь больше места, но важно знать, что виртуальная память процветает на SSD, вы можете получить от этого значительный прирост производительности. Не повредит ли это SSD? Да, но вы долго замените свой Mac, прежде чем заметите.

Я лично отключил виртуальную память на своем Retina MacBook Pro всего с 8 ГБ памяти. Вот математика, система использует около 2 ГБ памяти, считая встроенную графику. Так что это 6 ГБ для меня. Я делаю Xcode для работы, при этом потребляет не более 2 ГБ памяти. Так что у меня полно запасов.

Управляющее резюме

Область подкачки (называемая разделом подкачки, файлом подкачки или файлом подкачки) — это всего лишь механизм увеличения физической памяти, адресуемой ОС.

Если у вас мало доступной физической оперативной памяти и на сегодняшней машине, я бы сказал, если у вас 4 ГБ или меньше оперативной памяти. Тогда, вероятно, вы должны иметь обмен. Но это зависит от вашей рабочей нагрузки и от того, как вы используете свою машину.

Если у вас более 4 ГБ ОЗУ, есть большая вероятность, что ваша система никогда не будет использовать своп. Так что, если своп включен или нет, это мало что изменит.
Хотя это зависит от других факторов, чем дольше будет работать ваша машина, тем больше вероятность того, что ОС заменит небольшую неиспользуемую часть ОЗУ на подкачку, даже если, по-видимому, осталось много места. Однако часто система использует «свободную» оперативную память для файловых буферов и других вещей, и некоторая рабочая нагрузка может заставить ваш файловый буфер использовать всю доступную оперативную память.

Исходная информация

В любом случае, что произойдет, если вы отключите своп и ваша память будет полностью использована? Что ж, в следующий раз, когда приложение запросит больше памяти (например, с помощью malloc или realloc), оно получит сообщение об ошибке! Если он правильно закодирован, приложение обнаружит его, но обработка такой ошибки и корректное завершение программы все еще могут быть проблемой! Однако многие разработчики не проверяют успешное выделение памяти, и часто приложение падает, как только эта невыделенная память будет использоваться. Таким образом, существует большая вероятность того, что приложение рухнет, и на самом деле многие приложения рухнут, потому что у вас обычно работает более одного приложения в одно и то же время. Надеюсь, само ядро ​​должно быть невосприимчивым, но по моему опыту так было не всегда.

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

У меня лично 2 машины с 8 и 16 Гб ОЗУ. Мое личное использование этой машины никогда не должно приближать меня к использованию всей этой оперативной памяти (сегодня! Возможно, через несколько лет это может быть по-другому). Единственная причина, по которой я достиг бы пределов физической памяти, заключается в том, что процесс стал мошенническим и потребляет всю оперативную память. Отсутствие свопа — это облегчение, ядро ​​сразу уничтожит мошеннический процесс, как только он достигнет предела ОЗУ. Если у вас есть подкачка, вы получите болезненный опыт (возможно, не на SSD ...), поскольку ваша система будет подкачиваться, подкачиваться и подкачиваться и иногда полностью перестанет отвечать, пока, надеюсь, ваше ядро ​​не убьет виновника!

Советует

Вас не должны пугать люди, которые говорят вам, что если вы удалите swap, может произойти что-то ужасное. Если вы это сделаете, ваше физическое адресное пространство будет уменьшено, как если бы вы перешли с 4 ГБ ОЗУ на 2 ГБ. Вы бы сделали такое? Тогда не стоит удалять своп. Однако вы можете решить ограничить его, и это было бы разумно .

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

Когда своп следует сохранить, пользователь должен попытаться установить ограничения на объем памяти, который может использовать процесс. В системе Linux можно использовать ограничения памяти cgroups, чтобы избежать выхода какого-либо процесса из-под контроля, я не знаю эквивалента в OS X, но так и должно быть.

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

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

Мой собственный пример

У меня есть старый компьютер с 1 ГБ ОЗУ, там у меня большой своп: 4 ГБ, чтобы я мог запускать на нем Firefox и другие приложения. Я стараюсь использовать как можно меньше приложений (или вкладок в Firefox), чтобы иметь правильный пользовательский интерфейс.

У меня есть небольшой сервер с 8 ГБ оперативной памяти. Там я точно знаю свою нагрузку и не хочу, чтобы мой сервер тормозил из-за того, что какой-то процесс вышел из-под контроля и потребляет всю память. Там у меня нет барьера ограничения памяти подкачки и cgroup, поэтому приложения или службы могут падать, но не ядро. Кстати, это машина с Linux.

Затем у меня есть мой Mac с 16 ГБ ОЗУ. Я не единственный его пользователь, и мы не прочь подождать при смене пользователя. Там у нас есть своп, мне сложно планировать нагрузку других пользователей этого компьютера. Даже если бы я был единственным, я бы использовал своп. Я часто запускаю несколько виртуальных машин и использую приложения, потребляющие память, но не все одновременно, поэтому я не возражаю против замены ОС неиспользуемым приложением, чтобы я мог ускорить дисковый ввод-вывод или запустить еще одну виртуальную машину. Хотя до сих пор я не видел, чтобы эта машина менялась!

Я просто отключил файл подкачки на своем Macbook air 2011 года (4 ГБ ОЗУ, 128 ГБ SSD), потому что мне надоело, что файл подкачки медленно съедает все оставшееся место на жестком диске, а затем мне приходится перезагружаться. Таким образом, идея состоит в том, что я просто буду запускать меньше программ.

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

Посмотрю, как пойдет со стабильностью, но пока я доволен кемпером. Это также заставляет меня запускать меньше приложений (и вкладок Chrome) за раз, что хорошо для фокусировки на задаче.

Одни говорят: отключение подкачки повышает производительность .

Это верно. Любое использование виртуальной памяти — это большое замедление — даже быстрый SSD в тысячу раз медленнее DRAM ; диск больше вроде в миллион раз медленнее. Вам нужна только небольшая часть обращений к памяти, чтобы перейти к подкачке, чтобы иметь большое значение во времени выполнения. Если, например, 0,1% обращений приходится на ваш быстрый SSD, это теоретически вдвое снижает вашу скорость. Однако многозадачность скрывает это — в ожидании устройства подкачки процессор может быть занят чем-то другим. Таким образом, пока у вас есть разумный уровень многозадачности, чтобы что-то было готово к запуску, когда у вас возникает ошибка страницы, потеря производительности не так велика. Слишком много вещей с высокими требованиями к памяти, выполняемых одновременно, приводят к перегрузке : активность подкачки доминирует над производительностью.

Но: без свопа, если у вас кончится физическая память, это все равно, что врезаться в стену. Возможно, вы сможете бежать быстрее, если немного уменьшите свой вес, не надевая очки; логика этого не улучшается, если у вас действительно тяжелые очки…