При инсталляции одного сервера я имел еще немного опыта и по совету серверного администратора установил небольшой swap в 512 мегабайт. Что такое swap в целом для сервера, это хранилище данных для выгрузки из оперативной памяти, когда там разумное уже наполнение. То есть если говорить более чётче, у вас, например, 32 гигабайта оперативной памяти и вы отдали гигов 12 под разного рода буфера для ускорения работы, осталось 20 гигов, которые могут забиться. Здесь в линуксах стоит параметр, который определяет при каком размере наполнения данных вы можете сбросить данные уже в swap на диске, чтобы избежать нагрузки и увеличить размер возможностей для исполняемых данных.
Это я пытаюсь описать суть простым языком, надеюсь опытный серверный администратор, мыслящий категориями более точными не начнёт меня за это ругать. Но в общем то swap желательно иметь, бывает, что процессы разбухают до больших размеров и без swap вы можете оказаться в ситуации что, начнёт сервер притормаживать или просто маленький swap забьётся и вы снова ощутите тормоза и не будете знать в чем проблема. И закончу эту часть прочитанной фразой: хотите увидеть спор сисадминов, спросите их о необходимости и размере swap.
Как посмотреть размер SWAP и его загрузку
Первое с чего стоит начать, это глянуть размеры swap и его загрузку на сервере или vps. Заходите в top или htop, без разницы что у вас там стоит и там вы увидите данные о размере swap и его загрузке. Я раньше мало внимания на это обращал, пока не начались некоторые тормоза в определенные моменты работы. А там просматривая все данные увидел, что все 512 мегабайт забиты и соответственно тормозит сервер. Итак, вы зашли и увидели размер swap и его загруженность. Если она критичная, то есть он забит на 100% то стоит задуматься об увеличении места, но тут вылезает очень интересный момент: не получится увеличить физический размер swap без потерь данных, так как это фактически форматирование дисков. А если у вас рабочий сервер, то это уже точно проблема. И тут мы вытаскиваем простое решение в виде виртуального swap, который очень легко создаётся.
Создание виртуального SWAP
Что такое виртуальный swap. Это по сути тоже самое, физическое место на диске, но реализованное в виде виртуального диска файла, подключаемого в fstab.conf. Если говорить понятнее: вы делаете файл, заполняете его нулевыми данными, соответственно размер нужный и затем подключаете его к работе сервера как swap диск. Никаких форматирований и проблем. Отличное решение кстати. Я решил так и сделать. Обдумал размеры, которые стоит указать. Если памяти у меня 32 и порядка 12-16 гигов заняты буферами разного уровня, то в работе с процессами участвуют 16 гигов, значит сделаю себе такой же размер swap. Далее внимательно смотрите порядок создания:
- Заходим в ssh и там проверяем размер дисков: df -h;
- Даём команду на создание файла с нулями sudo fallocate -l 16G /swapfile;
- Другой вариант создания файла: dd if=/dev/zero of=/swapfile bs=1M count=16384;
- Теперь надо дать права доступа к файлу для root: sudo chmod 600 /swapfile или chmod 600 /swapfile;
- Включаем swap и указываем файл: swapon /swapfile
- Вносим в fstab.conf данные о swap: /swapfile swap swap defaults 0 0
Дальше можно для надёжности произвести перезагрузку. И после этого уже начинать фиксировать результаты.
Настройка подключения swap
Теперь немного о общих настройках подключения swap. Обычно по стандарту стоит, что после использования 60% памяти начинают данные перекладываться в swap для экономии памяти. Чтобы проверить это точно делаем следующую команду: cat /proc/sys/vm/swappiness
и видим цифры результата. Если там стоит стандартно 60, то значит, что при достижении этого параметра из памяти данные переходят в swap.
Теперь проверим параметр vfs_cache_pressure, который уже даст вам значение насколько ваш линукс будет удерживать кэши в оперативке или же переносить в swap. Для проверки вводим команду: cat /proc/sys/vm/vfs_cache_pressure
. В ответе снова будут цифры и их значения обозначают следующее:
Параметры vm.vfs_cache_pressure:
0 — не кэшировать.
100 — как есть стандартно.
>100 — агрессивно кэшировать дисковые операции.
В принципе дальше вы можете для себя выбирать какие параметры стоит выставить. Я сделал себе виртуальный своп на 16 гигабайт, оставил стандартно 40% и также оставил среднее в 100 кэширование. Теперь по итогам проверки вижу, что своп используется примерно 5 гигабайт из 16 за сутки. Значит он был нужен, и эта операция была нужна.
Кроме этого сразу снизились параметры нагрузки и перестали выскакивать скачки непонятные, когда процесс оставался в свопе, забивал его и тормозил в целом сервер. Пишите свои наблюдения и опыты, будет интересно прочесть.
Да кстати команда sysctl -p
она поможет вам подцепить данные, без общей перезагрузки.
Вопрос к автору: Как выбрать оптимальный размер swap для сервера и как настроить параметр, определяющий когда данные следует отправлять в swap на диске?
Некоторые эксперты считают, что размер swap должен быть равен или больше размера оперативной памяти для обеспечения оптимальной производительности сервера. Однако другие рекомендуют устанавливать swap размером 2-3 раза больше оперативной памяти, особенно при наличии больших нагрузок на сервер.
Кроме того, важно учитывать, что использование swap может существенно снизить производительность сервера, особенно если сервер часто обращается к данным, хранящимся в swap. Поэтому рекомендуется оптимизировать использование оперативной памяти, чтобы избежать необходимости в использовании swap.
Swap также может использоваться для управления пиковыми нагрузками, когда оперативная память не может справиться с загруженностью сервера. Например, при выполнении больших вычислений или запуске множества процессов одновременно. В таких случаях swap позволяет временно сохранить неиспользуемые данные на диск, освобождая оперативную память для более важных задач.
Но необходимо осторожно использовать swap на серверах, работающих с базами данных или другими приложениями, которые требуют быстрого доступа к данным. В таких ситуациях рекомендуется сконфигурировать сервер таким образом, чтобы минимизировать использование swap или вовсе отказаться от его использования.
Какой параметр в линуксах определяет размер наполнения данных, при котором они будут сброшены в swap?
Какой размер swap-раздела рекомендуется для сервера с определенным объемом оперативной памяти?
Какова роль swap для сервера и каковы последствия отсутствия или недостаточного размера swap?
Какая функция выполняет swap на сервере и как его настройка влияет на производительность?
Какой параметр в линуксах определяет размер наполнения данных, при котором они могут быть сброшены в swap?
Интересно, что вы упомянули о роли swap-памяти на сервере и ее важности для эффективной работы систем. Хотелось бы уточнить некоторые моменты, чтобы глубже понять, как именно настраивать swap под различные сценарии использования.
Например, вы упомянули, что при объеме оперативной памяти в 32 ГБ и использовании 12 ГБ под буферы остаётся 20 ГБ для основных процессов. Как вы определяете размер swap в таком случае? Есть ли конкретные рекомендации по отношению к отношению объема оперативной памяти к объему swap, который следует выделять в зависимости от характера нагрузки на сервер?
Также, если взять в расчет сценарий с высокими нагрузками, например, при использовании сервера для обработки больших данных или в условиях виртуализации, необходимо ли увеличивать размер swap или изменять параметры настройки swappiness (то есть порога переключения между RAM и swap)?
Плюс, вы не упомянули о том, как правильно настроить swap-файл или swap-раздел. Может быть, будет полезно добавить информацию о возможных подходах к созданию и активации swap на сервере, а также о том, как можно следить за состоянием swap в системах Linux? Например, можно использовать команду `swapon -s` для проверки использования swap.
Ваш опыт очень ценен, и буду рад любым дополнениям или уточнениям, которые помогут лучше понимать эту тему.