Что делать при нехватке RAM
Сервер начал тормозить, процессы внезапно падают, в логах мелькает OOM-killer — классические признаки нехватки RAM. Память кончилась, система задыхается, и вопрос «что делать при нехватке RAM» встаёт ребром. Ниже разберём по шагам: как понять, куда уходит память, что можно оптимизировать прямо сейчас, чем помогает swap и в какой момент честнее просто добавить памяти — с командами и практикой эксплуатации сервера.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Как понять, что дело в памяти
Сначала подтвердите диагноз. Нехватка памяти проявляется характерно: сервер тормозит, отклик растёт, а в тяжёлых случаях система убивает процессы, чтобы освободить RAM. Посмотрите текущую картину:
free -h
Обратите внимание на строку памяти и на swap. Если свободной памяти почти нет, а swap активно занят и растёт — вы упёрлись в потолок RAM. Проверьте, не срабатывал ли OOM-killer, который принудительно убивает процессы при критической нехватке памяти:
dmesg | grep -i "killed process"
journalctl -k | grep -i oom
Если в выводе есть строки об убитых процессах — система уже задыхается и вынужденно жертвует приложениями. Это самый явный сигнал, что памяти не хватает, и просто перезапуском проблему не решить: она вернётся, как только нагрузка снова вырастет.
Полезно понимать, как именно работает OOM-killer, потому что его логика иногда удивляет. Когда памяти совсем не остаётся, ядро вынуждено освободить её, убив какой-то процесс, и выбирает жертву по внутренней оценке: обычно под нож идёт процесс, занимающий много памяти. Коварство в том, что самым прожорливым нередко оказывается не виновник, а главная полезная программа — например, база данных, которая законно держит большой кеш. В результате сервер убивает именно то, что вам нужнее всего, хотя реальную нехватку создал совсем другой процесс с утечкой. Поэтому не стоит воспринимать убитый процесс как виновника: он часто лишь жертва. Настоящую причину ищите в том, что съело память в момент, предшествующий срабатыванию OOM-killer, — а для этого полезно иметь мониторинг с историей потребления, который покажет, чей аппетит рос перед крахом. Без такой истории вы видите только последствие, но не причину.
Куда уходит память
Прежде чем что-то менять, поймите, кто съедает RAM. Отсортируйте процессы по потреблению памяти:
ps aux --sort=-%mem | head -n 10
Верхушка списка покажет главных потребителей. Частые виновники предсказуемы. База данных с завышенными буферами — MySQL или PostgreSQL по умолчанию рассчитаны на серверы помощнее и легко занимают больше, чем есть. Слишком много воркеров веб-сервера или PHP-FPM — каждый процесс ест память, и десятки их суммарно съедают всё. Приложение с утечкой памяти, которое со временем разрастается. Кеши, которым отдали слишком много. Уже по списку обычно понятно, где перекос и что тюнить в первую очередь.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSЧто оптимизировать прямо сейчас
Часто память кончается не потому, что её физически мало, а потому что софт настроен расточительно. Первым делом урежьте аппетиты главных потребителей. У базы данных уменьшите размеры буферов под реальный объём памяти — на маленьком сервере буферный пул InnoDB на сотни мегабайт при гигабайте всей RAM это перебор. Ограничьте число воркеров веб-сервера и PHP-FPM: держать полсотни процессов там, где хватает десятка, — прямой путь к исчерпанию памяти. Каждый лишний процесс это отъеденные мегабайты.
Проверьте, нет ли на сервере лишнего — забытых сервисов, отладочных инструментов, тяжёлых панелей, которые вы не используете, но которые занимают память постоянно. Отключите всё ненужное. Если у приложения утечка, помогает регулярный плановый перезапуск, который сбрасывает разросшийся процесс, — это костыль, но он держит сервер на плаву, пока чините причину. Грамотная настройка нередко освобождает столько памяти, что вопрос нехватки снимается без всякого апгрейда.
Обратите внимание и на кажущуюся занятость памяти, которая пугает новичков. В выводе free часть памяти всегда числится под кешем и буферами файловой системы, и это нормально: система использует свободную RAM под кеш, чтобы ускорить работу с диском, но мгновенно отдаёт её приложениям, как только та понадобится. Поэтому строку с кешем не стоит воспринимать как нехватку — реальный дефицит виден по свободной памяти с учётом того, что кеш освобождаем, и по активности swap. Прежде чем в панике оптимизировать, убедитесь, что вы упёрлись в настоящую нехватку, а не в здоровое поведение системы, которая просто не держит память простаивающей без дела.
Swap как временная страховка
Swap — это файл или раздел на диске, куда система выгружает неактивные страницы памяти, освобождая RAM. Он не заменяет оперативную память и работает в разы медленнее, но выступает страховкой от падений: при кратковременном всплеске потребления сервер не рухнет и не станет убивать процессы, а переживёт пик за счёт свопа. Если swap ещё не настроен, добавьте файл подкачки:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
Важно понимать границы: swap спасает от разовых пиков, но если сервер живёт в свопе постоянно, это не решение, а признак, что памяти реально не хватает. Работа из свопа означает тормоза, потому что диск на порядки медленнее RAM. Воспринимайте swap как подушку безопасности, а не как способ бесконечно ужимать сервер.
Когда пора добавить память
Честный вывод, к которому стоит прийти вовремя. Оптимизация и swap решают многое, но не отменяют физику: если проект вырос, данных стало больше, а посетителей десятки, определённому набору задач нужно определённое количество памяти, и меньше уже не выжать без потери качества. Признаки, что вы на этой границе: память упирается в потолок даже после тюнинга, OOM-killer срабатывает регулярно, база постоянно свопит, а любое повышение нагрузки роняет сервисы.
В этот момент героическая борьба за каждый мегабайт обходится дороже, чем апгрейд, — вы тратите время и рискуете стабильностью ради экономии, которая не окупается. Добавить память на VPS у MAATRIX можно без переезда и простоя: вы повышаете тариф, сервер получает больше RAM, и проблема нехватки уходит, а оплата — картой из России или криптой. Разумная эксплуатация сервера это баланс: сначала выжать максимум из оптимизации, а когда упёрлись по-настоящему — дать проекту ресурсы, которые ему нужны.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Как понять, что не хватает именно памяти?
Команда free -h покажет активный растущий swap и почти нулевую свободную RAM, а следы работы OOM-killer видны в journalctl -k или dmesg.
Что оптимизировать в первую очередь?
Буферы базы данных и число воркеров веб-сервера и PHP-FPM: чаще всего память съедают именно завышенные настройки, а не реальная потребность.
Помогает ли swap при нехватке RAM?
Как страховка от разовых пиков — да. Но постоянная жизнь в свопе означает тормоза и сигнализирует, что памяти реально мало, а не решает проблему.
Когда добавлять память?
Когда после тюнинга и swap память упирается в потолок, OOM-killer срабатывает регулярно, а нагрузка роняет сервисы — проект перерос текущий тариф.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.