Linux

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

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

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

Ответ 1

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

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

Ответ 2

НЕ рекомендуется отключать своп, даже если у вас достаточно памяти. Если вашему серверу потребуется больше памяти, а он ее не получит, то произойдет сбой. Однако это можно предотвратить (в некоторой степени), если у вас есть файл подкачки. Да, производительность вашего сервера снизится при использовании свопа, но, по крайней мере, он будет работоспособен и доступен. Затем вы можете запланировать добавление большего объема памяти, если это потребуется, если ваш сервер начнет использовать swap. Вместо того чтобы отключать своп, вы можете контролировать степень его использования. 

Ответ 3

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

ulimit -d

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

ulimit -T

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

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

Ответ 4

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

Посмотрите на эту ссылку:

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

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

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

Ответ 5

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

Схожие статьи

Linux

Как быстро скопировать большое количество файлов между двумя серверами

Linux

Да или нет в сценарии Bash

Linux

Как записать stderr в файл при использовании «tee» с пайпом

Linux

Что такое «POSIX»?