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