Управляющее резюме
Область подкачки (называемая разделом подкачки, файлом подкачки или файлом подкачки) - это просто механизм для увеличения физической памяти, адресуемой ОС.
Если у вас мало доступной физической памяти и на сегодняшней машине, я бы сказал, если у вас 4 ГБ или меньше оперативной памяти. Тогда у вас, вероятно, должен быть обмен. Но это зависит от вашей рабочей нагрузки и от того, как вы используете свою машину.
Если у вас более 4 ГБ ОЗУ, есть большая вероятность того, что ваша система никогда не сможет использовать своп. Так что, если своп включен или нет, это не сильно изменится.
Хотя это зависит от других факторов, чем дольше ваша машина будет работать, тем больше вероятность того, что операционная система поменяет небольшую неиспользуемую часть оперативной памяти на процесс подкачки, даже если остается достаточно места. Однако часто система использует «свободную» оперативную память для файловых буферов и прочего, и из-за некоторой рабочей нагрузки буфер файлов может использовать всю доступную оперативную память.
Исходная информация
В любом случае, что произойдет, если вы отключите своп и ваша память будет полностью использована? Что ж, в следующий раз, когда приложение запросит больше памяти (как с malloc или realloc), оно получит ошибку! Если он правильно закодирован, приложение обнаружит его, но обработка такой ошибки и корректное завершение программы могут быть проблемой! Тем не менее, многие разработчики не проверяют успешность выделения памяти, и часто происходит сбой приложения, как только эта нераспределенная память будет использоваться. Таким образом, существует большая вероятность того, что приложение будет аварийно завершено, и на самом деле многие приложения аварийно завершат работу, потому что обычно одновременно выполняется несколько приложений. Надеюсь, само ядро должно быть невосприимчивым, но по моему опыту это было не всегда так.
Если у вас есть своп, у вас будет такое же поведение , но у вас будет более высокий лимит, так что есть вероятность, что вы не достигнете этого лимита.
У меня есть лично 2 машины с 8 и 16 ГБ оперативной памяти. Мое личное использование этих машин никогда не должно приближать меня к использованию всей этой оперативной памяти (сегодня! Возможно, через несколько лет это может измениться). Единственная причина, по которой я бы достиг физических пределов ОЗУ, заключается в том, что процесс стал мошенническим и потребляет всю ОЗУ. Отсутствие свопа - это облегчение, ядро сразу же убьет мошеннический процесс, как только он достигнет предела оперативной памяти. Если у вас есть своп, вы получите болезненный опыт (может быть, не на SSD ...), так как ваша система будет своп, а также своп и свопинг и станет иногда полностью безразличной, пока, надеюсь, ваше ядро не убьет преступника!
Консультирует
Вас не должны пугать люди, которые говорят вам, что если вы удалите своп, то может произойти что-то ужасное. Если вы это сделаете, ваше физическое адресное пространство будет уменьшено, как если бы вы перешли с 4 ГБ ОЗУ на 2 ГБ. Вы бы сделали такую вещь? Тогда вам не следует удалять своп. Однако вы можете решить ограничить его, и это было бы разумно .
Если кто-то думает, что его рабочая нагрузка может привести к тому, что он будет использовать близко или больше, чем доступное физическое ОЗУ, или если потребуется много операций ввода-вывода (чтение / запись на диски), то своп должен быть сохранен.
Когда следует сохранить своп, пользователь должен попытаться установить ограничения на объем памяти, который может использовать процесс. В системе Linux можно использовать ограничения памяти cgroups, чтобы избежать выхода из-под контроля некоторых процессов. Я не знаю эквивалента в OS X, но так и должно быть.
Однако, если у человека более чем достаточно доступной памяти для его рабочей нагрузки, он может безопасно отключить обмен или сохранить его. Это не сильно изменится даже с точки зрения производительности, потому что, если система не использует подкачку, вы не столкнетесь с падением производительности (особенно заметным на старом ротационном жестком диске, в особенности на SSD).
Использование того же трюка, что и выше, чтобы попытаться установить ограничения памяти для процесса или группы процессов, также выгодно в случае более чем достаточно доступной оперативной памяти.
Мой собственный пример
У меня есть старый компьютер с 1 ГБ оперативной памяти, там у меня большой своп: 4 ГБ, чтобы я мог запустить на нем Firefox и другие приложения. Я стараюсь использовать как можно меньше приложений (или вкладок в Firefox), чтобы иметь правильный пользовательский интерфейс.
У меня небольшой сервер с 8 ГБ оперативной памяти. Там я точно знаю свою рабочую нагрузку и не хочу, чтобы мой сервер замедлялся, потому что процесс вышел из строя и потребляет всю память. Там у меня нет барьера, ограничивающего ограничение памяти подкачки и cgroup, поэтому приложения или службы могут аварийно завершить работу, но не ядро. Кстати, это машина Linux.
Затем у меня есть Mac с 16 ГБ оперативной памяти. Я не единственный пользователь этого, и мы не возражаем против ожидания при переключении пользователя. Там у нас есть своп, мне сложно спланировать нагрузку других пользователей этого компьютера. Даже если бы я был единственным, я бы использовал своп. Я часто запускаю несколько виртуальных машин и использую приложения, потребляющие память, но не все одновременно, поэтому я не возражаю против замены ОС в неиспользуемом приложении, чтобы я мог ускорить дисковый ввод-вывод или запустить еще одну виртуальную машину. Несмотря на то, что до сих пор я не видел, чтобы эта машина менялась!