Swap 100%, сайт тормозит — ребут не план лечения

Сервер «жив», но всё ползёт. Через час после ребута снова swap забит — и утром MySQL мёртв. Чаще всего это не «мало RAM навсегда», а процесс, который съел память, или OOM-killer уже отстрелил базу.

Картина, которую узнаёшь

  • SSH открывается с задержкой, команды «висят».
  • free -h — swap Used ≈ 100%, available RAM почти ноль.
  • Сайт белый экран или 502 — php-fpm или mysql нет в процессах.
  • После reboot час тишины — потом снова.

Три шага до ребута (2 минуты)

# 1. Память и swap
free -h

# 2. Кто жрёт RAM прямо сейчас
ps aux --sort=-%mem | head -10

# 3. Был ли OOM-killer недавно
dmesg -T 2>/dev/null | grep -iE 'out of memory|oom-kill|killed process' | tail -5
# или на старых системах:
grep -i oom /var/log/syslog 2>/dev/null | tail -5

Если в dmesg есть «Killed process mysql» — ребут только вернёт сайт на время; причина останется.

Частые виновники на VPS с сайтом

  • MySQLinnodb_buffer_pool_size больше половины RAM на маленьком VPS.
  • php-fpm — слишком много workers × memory_limit.
  • Bitrix — агрессивный кеш + cron + импорт в одно время.
  • Утечка в приложении — рост RSS одного процесса днями (смотреть top / htop).

Что делать дальше

  1. Зафиксировать имя процесса из OOM-лога — не гадать.
  2. Временно снизить workers php-fpm или лимиты MySQL — если понятен виновник.
  3. Добавить RAM — только если нагрузка легитимная, а не утечка.
  4. Настроить алерт по RAM/swap — не ловить «всё упало» ночью.
Swap 100% постоянно — диск деградирует, latency растёт. Это уже деградация, не «терпимо».

Честно про Mediops

На VDS Mediops следит за CPU и диском; при нехватке памяти часто растёт load и падает сайт — алерт по недоступности URL поможет раньше звонка клиента. Бесплатно: 1 сервер + 3 сайта.

Не узнавай о падении от клиента

Email-алерты на бесплатном тарифе; Telegram и MAX — с «Старт».