Оптимизация памяти на VPS для интернет-магазина: swap и ядро

Оптимизация памяти на VPS для интернет-магазина: swap и ядро

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

Почему интернет-магазину не хватает памяти: пример из Минска

Владелец магазина игрушек в Минске арендовал VPS с 2 ГБ RAM. На витрине 3 тысячи товаров, работает CMS (OpenCart) и MySQL. В пик рекламной кампании сайт начал выдавать ошибки 503. Стандартный VPS тариф подразумевает swap-файл по умолчанию, но его размер и настройки не оптимизированы. Магазин сбросил несколько заказов, потерял выручку.

Совет: проверьте текущий объём swap командой free -h. Если swap отсутствует или его меньше 2 ГБ при 2 ГБ RAM, увеличьте. Для интернет-магазина с базой данных разумно установить swap = 1,5–2 × размер RAM.

Как правильно настроить swap на VPS

Swap — это файл или раздел на диске, куда система выгружает редко используемые страницы памяти. Для работы интернет-магазина swap должен лежать на быстром SSD, иначе при его активном использовании скорость упадёт. В белорусских дата-центрах большинство VPS уже используют SSD, но если ваш провайдер предлагает HDD, стоит перейти на SSD-тариф перед настройкой swap. Про выбор дисков читайте в статье выбор SSD или NVMe для белорусского интернет‑магазина.

Последовательность настройки swap на Debian/Ubuntu:

  • Создайте файл подкачки: fallocate -l 3G /swapfile (если RAM 2 ГБ, делаем 3 ГБ).
  • Установите права: chmod 600 /swapfile и mkswap /swapfile.
  • Включите: swapon /swapfile.
  • Добавьте в /etc/fstab строку для автоматической активации при перезагрузке.
  • Измените параметр swappiness: sysctl vm.swappiness=10 (значение от 0 до 100, для сервера БД лучше 10–20).

Настройка параметров ядра для снижения использования памяти

После настройки swap стоит подправить параметры ядра, чтобы система не сбрасывала кэш слишком агрессивно и не вызывала излишнюю нагрузку. Пример из Гомеля: магазин стройматериалов на VPS с 4 ГБ RAM заметил, что MySQL периодически «вылетает» при нехватке памяти. Оказалось, что параметр vm.dirty_ratio стоял по умолчанию 20, из-за чего ядро задерживало запись данных на диск, а при пике памяти OOM-killer убивал MySQL.

Рекомендуемые настройки для типового интернет-магазина (добавьте в /etc/sysctl.conf и выполните sysctl -p):

  • vm.dirty_ratio = 10 — процент памяти, после которого процессы начинают принудительно сбрасывать данные на диск.
  • vm.dirty_background_ratio = 5 — когда фоновый демон начинает запись.
  • vm.vfs_cache_pressure = 50 — снижает агрессивность очистки кэша dentries/inodes (полезно для CMS с множеством файлов).
  • vm.swappiness = 10 — как указано выше, минимально использует swap, пока реально не понадобится.

Типичные ошибки при настройке памяти на VPS

  • Установка swap на медленный HDD — при активной работе магазина диск становится бутылочным горлышком.
  • Слишком высокий swappiness (100) — ядро начинает выгружать почти всё в swap, даже когда RAM свободна, что замедляет работу.
  • Забыли настроить параметры MySQL buffer pool — по умолчанию InnoDB использует 128 МБ, а для магазина с тысячами товаров нужно 60–70 % от имеющейся RAM.
  • Отключили OOM-killer без резервирования — при переполнении памяти система зависает, лучше настроить правильный swap и мониторинг.
  • Копируют настройки swap из документации для десктопа — на сервере с БД нужны другие пропорции и swappiness.
  • Не проверяют реальное использование памяти после изменения — без мониторинга (htop, free, vmstat) легко ошибиться с размером swap.

Три шага, которые можно сделать на этой неделе:

  1. Подключитесь к VPS по SSH, выполните free -h и swapon --show. Если swap отсутствует или его меньше 1,5 × RAM — создайте или увеличьте файл подкачки на быстром SSD.
  2. Настройте swappiness на 10 и параметры dirty_ratio/vfs_cache_pressure через /etc/sysctl.conf. Перезагрузите sysctl.
  3. Проверьте настройки MySQL (Innodb_buffer_pool_size) — выделите под него не менее 60% от свободной RAM, оставив запас для swap и кэша ОС.