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

 

Архитектура SWAP в Linux и FreeBSD: принципы управления виртуальной памятью

SWAP – это определенная область на диске, которая используется как расширение RAM ядром Linux. Основной принцип данной архитектуры состоит в том, что при заполнении физической памяти, система самостоятельно перенаправляет неактивные страницы в SWAP, таким образом освобождается место для выполнения более важных задач. Вследствие чего можно избежать аварийного завершения процессов, но в целом производительность значительно снижается.

SWAP можно сравнить с аварийным вариантом, а не заменой RAM, а чрезмерное использование SWAP приводит к таким проблемным ситуациям как:

  • Медленное функционирование приложений. Из-за постоянной подгрузки данных с диска, приложения могут значительно замедляться.
  • Внезапные зависания системы из-за переключений между RAM и SWAP.
  • Значительный износ SSD.

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

Механизмы вытеснения страниц: как ядро решает, что отправить в SWAP

Процесс вытеснения страниц не осуществляется рандомно, ядро пытается определить какие данные используются реже всего.

Часто используется принцип LRU, к примеру, когда страница давно не используется – она становиться отличным вариантом для выгрузки в SWAP. Также, система Linux разделяет память на активный список и неактивный список. В неактивном списке будут все долго не используемые страницы, которые в дальнейшем переходит в SWAP.

Механизм вытеснения страниц достаточно просто, когда RAM заканчивается, запускается механизм reclaim, далее сканируется неактивный список, и страницы постепенно выгружаются.

Параметр swappiness: настройка баланса между оперативной памятью и SWAP

Главным параметром настройки баланса между оперативной памятью и SWAP является vm.swappiness. С помощью него определяется как будут выгружаться страницы, и его значения находятся в пределах от 0 до 100. К примеру, при 0 значении использование SWAP будет осуществляться лишь во время абсолютной нехватки памяти. При значении 100, SWAP будет очень часто использоваться даже если RAM еще не заполнена.

У многих дистрибутивов по умолчанию установлено значение 60. Но для серверных сред самым оптимальным значением будет диапазон от 1 до 20. При таком значении, система изначально использует всю доступную RAM и лишь потом осуществляется подкачка. Значение 0 не отключает SWAP, а использует этот вариант лишь в критической ситуации. Не рекомендуется полное отключение SWAP из-за того, что система может убивать процессы.

 

Часто спрашивают: Перенос сайта на WordPress: Пошаговое руководство по смене хостинга

Dirty pages и кэш записи: контроль буферизации и фоновой записи на диск

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

К основным параметрам грязных страниц относиться:

  • dirty_ratio – процент памяти занятый грязными страницами, и при достижение этого максимального процента процессы начинают записываться на диск. Осуществляется блокировка прежде, чем определенная часть данных не будет записана. По умолчанию значение обычно установлено на уровне 20.
  • dirty_background_ratio – превышая данный процент данные начинают сбрасываться на диск в фоновом режиме. По умолчанию значение обычно установлено на уровне 10.

Оптимальное значение непосредственно зависит от типа нагрузки и объёма RAM. К примеру, для сервера с 16ГБ RAM лучше установить vm.dirty_ratio на 40, а vm.dirty_background_ratio на 20. С помощью такой настройки возможно минимизировать риски резких блокировок и в целом повысит общую производительность системы.

 

Читайте также: Выделенный IP-адрес: нужен ли он вашему сайту и какие преимущества дает

Особенности использования SWAP на виртуальных серверах с KVM

Так как сервер с KVM – это полноценная виртуальная машина, процесс функционирует также как и на обычном Linux-сервере. Но, нужно не забывать, что такой подход имеет двойную виртуализацию памяти, где VPS и физический сервер оба используют SWAP.

 

 

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

Практические сценарии настройки SWAP для VPS и облачных серверов

Давайте на практических сценариях детальнее разберемся в настройках для облачных серверов и VPS.

Веб-сервер, который активно использует MySQL и PHP нуждается в значительном объёме памяти. В таких сценариях если использовать большой процент в swappiness, ваш проект может начать тормозить в связи с ранней подкачкой еще до заполнения RAM. Потому рекомендуется использовать следующие настройки:

vm.swappiness = 10

vm.dirty_background_ratio = 15

vm.dirty_ratio = 30

Для игровых серверов самым оптимальным решением будет использование следующего подхода:

vm.swappiness = 1

vm.dirty_background_ratio = 25

vm.dirty_ratio = 50

Для проектов, связанных с разработкой на VPS, самым оптимальным решением будет использование:

vm.swappiness = 20

vm.dirty_background_ratio = 10

vm.dirty_ratio = 20

 

Читайте также: Топ-5 плагинов WordPress для биткоин-платежей

Пошаговая настройка SWAP и системных параметров в Linux и FreeBSD

  • Начните с открытия файла конфигурации следующим образом:

sudo nano /etc/sysctl.conf

  • Следующим шагом будет изменения следующих строк в зависимости от вашего проекта и текущих требований:

# Оптимизация SWAP

vm.swappiness = 10

# Управление “грязными” страницами

vm.dirty_background_ratio = 20

vm.dirty_ratio = 40

# Минимизация частоты проверки неактивных страниц

vm.vfs_cache_pressure = 50

  • Далее нужно применить все внесенные изменения без перезагрузки используя:

sudo sysctl -p

  • Для проверки корректности заданных значений используйте:

cat /proc/sys/vm/swappiness

cat /proc/sys/vm/dirty_background_ratio

cat /proc/sys/vm/dirty_ratio

Продвинутые методы оптимизации управления памятью

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

 

Использование zram и zswap для повышения эффективности работы RAM

Zram – это модуль ядра Linux, в котором данные хранятся в сжатом виде, и он создает блочное устройство в RAM. С помощью такого подхода можно увеличить объем памяти и не обращаться к диску. Для установки используется:

sudo apt install zram-config

sudo systemctl restart zramswap

Zswap функционирует подобным образом, но выступает как кэш перед SWAP. Используя данный механизм данные сжимаются в RAM.

 

Мониторинг использования оперативной памяти и SWAP на сервере

Лучше использовать следующие инструменты для более эффективной работы:

  • free -h – обзор памяти в целом.
  • vmstat 1 – обзор активности подкачки.
  • Htop – отображает использование SWAP и RAM в реальном времени.

 

Когда увеличение SWAP может негативно повлиять на производительность SSD

Использование большого SWAP-файла может негативно повлиять на износ SSD. Потому более оптимальным решением будет:

  • Добавить RAM.
  • Оптимизация приложений.
  • Использование zram.

Как определить оптимальный размер SWAP для различных нагрузок

Определение оптимального размера SWAP – это своего рода баланс между объемом RAM, типом нагрузки, и уровнем допустимой деградацией. К примеру, для легких сервисов размер SWAP может составлять от 50 до 100% от RAM. Для задач связанных с backendом лучше использовать 25-50%, а для баз данных этот процент вовсе минимальный и составляет от 0-25%. Для low-latency систем лучшем подходом будет отключение SWAP вовсе.