Память и подкачка: когда пора на ступень выше
Как отличить нормальное заполнение памяти от нехватки, зачем нужен swap на маленькой ступени и по каким признакам принимать решение о переходе на тариф выше.
Обновлено 23 августа 2026 г.
«Свободно 120 МБ из 2 ГБ» пугает новичков и ничего не значит для Linux: система намеренно занимает свободную память под кэш файлов, потому что пустая память бесполезна. Настоящую картину даёт другая колонка.
Читаем free правильно
free -h
# total used free shared buff/cache available
# Mem: 1.9Gi 742Mi 102Mi 18Mi 1.1Gi 1.0Gi
# Swap: 1.0Gi 126Mi 898Mi
Смотрите на available — сколько памяти приложение сможет получить, вытеснив кэш. Пока это значение заметно больше нуля, машине хорошо. free в этом смысле бесполезен.
Тревожные признаки:
availableменьше 10 % отtotal;- растёт
Swap used, и он не освобождается; - в
vmstat 2ненулевые и постоянныеsi/so— система непрерывно гоняет страницы на диск.
Кто именно ест память:
ps aux --sort=-%mem | head -10
smem -tk -s uss 2>/dev/null | tail -10
Подкачка: нужна или нет
Небольшой swap полезен на любой ступени: он даёт системе место, куда убрать давно не используемые страницы, и защищает от мгновенной смерти процесса при коротком всплеске. Заменой памяти он не является — диск в сотни раз медленнее.
Создать файл подкачки на 2 ГБ:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
Умерьте охоту системы к подкачке:
sysctl -w vm.swappiness=10
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
Помните, что файл подкачки занимает место на диске ступени (40 ГБ на VDS-1) и его запись расходует полку скорости диска, см. Нагрузка на диск.
Утечка или маловато памяти
Отличить одно от другого помогает график памяти в панели /hosting/vds/m/<id> на недельном масштабе:
- Пила — растёт до потолка, обрывается при перезапуске службы, растёт снова. Это утечка в приложении, ступень выше только отложит проблему.
- Ровная полка у потолка с самого запуска — рабочему набору просто не хватает места.
- Резкий обрыв — процесс убил OOM killer, разбор в статье Кончилась память.
Перед сменой тарифа снимите очевидное: ограничьте SystemMaxUse для журнала, задайте разумные лимиты базе данных (MySQL по умолчанию просит немало), уберите неиспользуемые службы (systemctl list-units --type=service --state=running), для PHP-FPM и Gunicorn сократите число воркеров.
Когда переходить
Если после уборки available неделями держится у нуля, подкачка постоянно занята, а приложение вам нужно целиком — берите ступень выше. Память растёт по ряду 2, 4, 8, 16, 24, 32 ГБ. Переход выполняется только вверх, с доплатой за оставшиеся дни, понижение не предусмотрено: диск не сжимается. Подробности — в статье Улучшение тарифа.
Частые ошибки
- Отключить swap полностью. При всплеске система убьёт процесс вместо того, чтобы пережить минуту.
- Сделать swap размером с диск. Машина не умрёт, но будет ползти часами, что хуже быстрого падения.
- Смотреть
VIRTв htop. Виртуальный размер у JVM, PostgreSQL и Node огромен и не отражает потребление. СмотритеRES.
Проверять память надо до аварии, а не после. Настройте оповещение по порогу — простой рецепт есть в статье Оповещения о падении сайта.