Настройка SWAP, ускорение и стабилизация работы сервера

При инсталляции одного сервера я имел еще немного опыта и по совету серверного администратора установил небольшой 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она поможет вам подцепить данные, без общей перезагрузки.