Должен ли я полностью отключить своп для веб-сервера linux?

22

Недавно мой друг сказал мне, что было бы неплохо отключить своп на веб-серверах Linux с достаточным объемом памяти. Мой сервер имеет 12 ГБ и в настоящее время использует 4 ГБ (не считая кеш и буферы) при пиковой нагрузке.

Его аргумент состоял в том, что в нормальной ситуации сервер никогда не будет использовать всю свою оперативную память, поэтому единственный способ, с которым он может столкнуться с ситуацией OutOfMemory, связан с некоторой ошибкой / ddos ​​/ etc. Таким образом, если своп отключен, системе не хватит памяти, что в конечном итоге приведет к сбою памяти программы (скорее всего, процесса веб-сервера) и, возможно, некоторых других процессов. В случае замены включается наон потребляет оперативную память и подкачку и в конечном итоге приводит к тому же самому сбою, но перед этим он разгрузит важные процессы, такие как sshd, для подкачки и начнет выполнять много операций подкачки, что приведет к значительному замедлению. Таким образом, когда система ddos ​​может перейти в совершенно непригодное состояние из-за огромных задержек, и я, вероятно, не смогу войти в систему и завершить процесс веб-сервера или запретить весь входящий трафик (все, кроме ssh).

Это правильно? Я что-то упускаю (например, тот факт, что раздел подкачки очень полезен, даже если у меня достаточно ОЗУ)? Должен ли я выключить его?

Poma
источник
6
Итак, все ответы сводятся к утверждениям, что: 1. больше виртуальной памяти, безусловно, лучше, чем меньше, и 2. должен быть включен некоторый обмен, потому что он хорош, ни один из которых не является обоснованным.
NekojiruSou
2
Ошибочно думать, что своп предназначен исключительно для «резервной» памяти. Подкачка предназначена для места для размещения неиспользуемой памяти (чтобы вы могли использовать вашу фактическую память более эффективно). Вы всегда должны иметь своп. Если у вас нехватка памяти, то ваша нехватка памяти - точка. Это проблема управления мощностью, а не тенденция к обмену. У меня довольно длинный ответ serverfault.com/a/332205/75118, который пытается лучше объяснить намерения виртуальной памяти.
Мэтью Ифе

Ответы:

27

Я бы сказал, что это зависит от вашего варианта использования, а остальные ответы достаточно хорошо это описали. В конце концов, 4G свопа - это дешевый способ купить немного безопасности. И я чувствую, что из-за этой дешевизны люди не хотят ее отключать.

Но позвольте мне ответить риторическим вопросом. Если деньги не проблема, и у вас есть выбор между двумя системами - одна с 12G оперативной памяти и 4G подкачки, а другая с 16G оперативной памяти и без подкачки - какую из них вы бы выбрали? К сожалению, большинство людей все равно ответили бы, что они выберут 16 ГБ ОЗУ и все равно добавят 4 ГБ подкачки, что мне не хватает.

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

chutz
источник
14

НЕ рекомендуется отключать своп, даже если у вас достаточно памяти. Если вашему серверу нужно больше памяти, но он не получил его, он потерпит крах. Тем не менее, это может быть предотвращено (в некоторой степени), когда у вас есть область подкачки.

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

Я нашел эту страницу, говоря о свопе. Посмотрите на 3-й раздел.

Вместо того, чтобы отключить своп, вы можете контролировать своппинг .

Халед
источник
1
В описанной мной ситуации он будет использовать как подкачку, так и оперативную память, а также произойдет сбой. Он работает в течение нескольких месяцев и никогда не использовал более 30% памяти. Таким образом, очень маловероятно, что при нормальной работе он будет прыгать до 100% так быстро. Так что если какой-то процесс сошел с ума и израсходовал 8 ГБ, это означает, что он будет использовать столько памяти, сколько может получить ОС, то есть все.
Пома
@ Пома, у свопа есть и другие преимущества. Кроме того, вы можете позволить системе жить намного дольше, когда у вас есть своп. Это связано с тем, что объем подкачки может быть больше памяти, учитывая наличие дешевых жестких дисков.
Халед
6

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

ulimit -d

во время или до времени создания процесса, чтобы установить ограничение на объем памяти сегмента данных процесса - и, возможно, ограничение на количество потоков

ulimit -T

за процесс. ulimit твой друг. Пожалуйста, ознакомьтесь с одним из руководств по настройке памяти, прежде чем выключать своп. Вы также можете изменить параметры ядра на некоторые вещи, чтобы попытаться справиться с атаками DOS или плохими программами.

Посмотрите на это так: общая память в вашей системе - RAM + swap. Если у вас есть 12 ГБ подкачки, вы просто эффективно сокращаете емкость системной виртуальной машины вдвое, отключая подкачку. Плохая идея. На самом деле это не спор, это просто чтение того, что другие люди знали из прошлого плохого опыта в течение многих лет. Возможно, вашему другу тоже нужно почитать.

Джим Макнамара
источник
5

Как уже говорили другие, вы можете эффективно остановить свой сервер, используя swap, за исключением случаев, когда это абсолютно необходимо, используя параметр «swappiness». Это контролирует, насколько агрессивно ядро ​​будет выгружать страницы памяти.

Вы можете увидеть, что в данный момент установлено с:

cat /proc/sys/vm/swappiness

и вы можете редактировать его «вживую» с помощью (как root):

# echo "10" > /proc/sys/vm/swappiness

и чтобы оно сохранялось, добавьте следующее в /etc/sysctl.conf:

vm.swappiness=10
Орландо Ричардс
источник
2

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

Посмотри на это:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

Мой опыт: на этой машине, где я сейчас пишу, я отключил своп, потому что у меня 4Гб ОЗУ (в 2009 году это было много!). Я испытал только пару проблем, одна из которых открылась как 127 картинок одновременно по ошибке!

НО .. это рабочая станция, и я могу позволить себе перезагрузиться, если она зависнет. На сервере я думаю, что лучше иметь своп, и swap-in-RAM звучит хорошо для меня.

CyberPlant
источник
1

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

Джон Гарденье
источник
0

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

Кроме того, vm.swappiness может помочь вам контролировать интенсивность замены диска.

Dragos
источник
0

Если вы ввели значение от 0 до vm.swappiness, это не обязательно означает, что система не будет меняться. Это параметр, определяющий, насколько агрессивной будет тенденция керна к обмену, но он не отключает обмен.

Опять же, обмен это не плохо, но побои есть. Посмотрите на данные sysstat, и это должно дать вам хороший указатель на них.

Сохам Чакраборти
источник