Дешёвый VPS на 1–2 ГБ памяти и 20 ГБ диска годится для бота, ноды или небольшого сайта, пока не упрётся в одно из двух: кончится память или место. Память кончается внезапно: процесс убивает OOM-killer, сервис падает без объяснений. Место кончается тихо: логи, кеш пакетов и старые образы Docker съедают диск, пока не перестанут писаться базы. Ниже — как добавить swap и что чистить, с проверкой на каждом шаге.
- Как посмотреть память и свободное место на диске
- Swap: подушка для памяти
- Как создать swap-файл
- Включить при загрузке
- Как увеличить swap
- Swappiness: когда система лезет в swap
- Чистка диска
- Чем занято место на диске
- Очистка журнала journalctl
- Пакеты APT и старые ядра
- Snap
- Очистка Docker
- Кеш в домашней папке
- Проверить результат
- Про готовые скрипты
Как посмотреть память и свободное место на диске
Начните с диагностики, чтобы понять, что именно кончается:
free -h # память и swap df -h / # место на корневом разделе swapon --show # какой swap уже подключён
Если в free -h колонка available близка к нулю, а swap пустой или нет вовсе — нужен swap. Если df -h показывает 90% и больше — переходите к чистке диска.

Что процесс убило из-за нехватки памяти, видно в журнале ядра:
sudo dmesg -T | grep -i "out of memory"
Swap: подушка для памяти
Swap — место на диске, куда система выгружает редко используемые страницы памяти, когда оперативной не хватает. Это медленнее RAM в десятки раз, поэтому swap не заменяет память, а спасает от падения при пиках. Если сервису постоянно не хватает памяти, он будет работать, но тормозить — тогда нужен тариф побольше.
Сколько ставить: на сервере с 1–2 ГБ памяти — 2 ГБ swap, с 4 ГБ — 2–4 ГБ. Учитывайте, что это место вычитается из диска.
Как создать swap-файл
Если swapon --show уже что-то показывает, сначала отключите старый swap и проверьте, как он записан в /etc/fstab (об этом ниже). Если swap нет, сразу создавайте файл:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
fallocate выделяет место мгновенно. Если swapon ответит ошибкой «swapfile has holes» или «Invalid argument», файловая система такой файл не принимает — удалите его и создайте через dd, он записывает нули на самом деле и работает дольше:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
Права 600 обязательны: в swap попадает содержимое памяти, включая пароли и ключи, и читать его должен только root. mkswap ответит строкой вида «Setting up swapspace version 1, size = 2 GiB» — значит, всё в порядке.
Включить при загрузке
После перезагрузки swap сам не подключится, пока его нет в /etc/fstab. Проверьте, нет ли там уже записи, и только потом добавляйте:
grep swap /etc/fstab || echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
grep здесь страхует от повтора: без него каждый запуск tee -a добавит в fstab ещё одну такую же строку.
Как увеличить swap
Увеличить работающий swap-файл нельзя — его отключают, пересоздают и включают снова:
sudo swapoff /swapfile sudo rm /swapfile sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
swapoff переносит всё из swap обратно в память. Если памяти для этого не хватает, команда долго думает или завершается ошибкой — поэтому перед ней остановите тяжёлые сервисы. Запись в fstab менять не нужно: имя файла то же.
Swappiness: когда система лезет в swap
Параметр vm.swappiness определяет, насколько охотно ядро выгружает память в swap. По умолчанию в Ubuntu 60. Для сервера, где swap — страховка, а не рабочее место, разумно 10:
cat /proc/sys/vm/swappiness echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf sudo sysctl --system
Итог проверьте командой free -h: в строке Swap должен появиться новый объём.
Чистка диска
Сначала найдите, что занимает место, и только потом удаляйте. Чистить всё подряд по списку команд — способ удалить что-то нужное и ничего не освободить.
Чем занято место на диске
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15
Ключ -x не даёт du уходить в другие разделы и в /proc. Спускайтесь в самую большую папку и повторяйте команду. Удобнее то же самое делать в ncdu — он показывает дерево папок с размерами, по нему можно ходить стрелками и удалять клавишей d:
sudo apt install ncdu sudo ncdu -x /
На маленьких VPS место обычно съедают четыре вещи: журнал systemd, кеш пакетов, Docker и логи самих приложений.
Очистка журнала journalctl
journalctl --disk-usage sudo journalctl --vacuum-size=200M
Разовая чистка через время снова заполнит диск. Чтобы журнал не рос, задайте потолок в /etc/systemd/journald.conf:
[Journal] SystemMaxUse=200M
sudo systemctl restart systemd-journald
Не опускайте лимит до 10–20 МБ: когда что-то сломается, логов за прошлую неделю уже не будет.
Пакеты APT и старые ядра
sudo apt clean sudo apt autoremove --purge
apt clean удаляет скачанные .deb-файлы из /var/cache/apt/archives — при обновлении они скачаются заново. autoremove --purge удаляет зависимости, которые больше не нужны, и старые ядра, оставляя текущее и предыдущее. Посмотрите список перед подтверждением: если в нём пакет, которым вы пользуетесь, отметьте его как установленный вручную командой sudo apt-mark manual имя.
Snap
Snap хранит по несколько старых версий каждого пакета. Посмотреть и удалить отключённые:
snap list --all | awk '/disabled/{print $1, $3}'
snap list --all | awk '/disabled/{print $1, $3}' | while read name rev; do sudo snap remove "$name" --revision="$rev"; doneЧтобы старых версий не копилось больше двух:
sudo snap set system refresh.retain=2
Очистка Docker
Если на сервере есть Docker, скорее всего, место ушло к нему. Сколько и на что:
docker system df
Удалить остановленные контейнеры, неиспользуемые образы и кеш сборки:
docker system prune -a
Тома с данными эта команда не трогает. Ключ --volumes удалит и их — добавляйте его, только если точно знаете, что в неиспользуемых томах нет баз данных.
Логи контейнеров по умолчанию растут без ограничения. Лимит задаётся в /etc/docker/daemon.json и действует для контейнеров, созданных после перезапуска Docker:
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}Кеш в домашней папке
В ~/.cache копятся загрузки pip, npm и других программ. Удалять можно — программы скачают нужное заново, но сначала посмотрите, что там:
du -sh ~/.cache/* | sort -h
Удаляйте конкретные папки, а не всё содержимое разом.
Проверить результат
df -h /
Если после чистки место не освободилось, а файлы удалены, их держит открытым какой-то процесс — обычно это удалённый, но ещё пишущийся лог. Найти такие файлы:
sudo lsof +L1
Перезапустите процесс из списка — место вернётся.
Про готовые скрипты
В чатах и гайдах часто советуют запустить скрипт одной строкой вида source <(wget -qO- https://...) или curl ... | bash. Такой скрипт выполняется с вашими правами, и вы не видите, что он делает. Так на серверы часто попадают вирусы-майнеры. Если хотите им воспользоваться, скачайте его отдельно, прочитайте и только потом запускайте. Все шаги из этой статьи — несколько команд, которые проще выполнить руками и понимать, что произошло.
Если на сервере планируется локальная нейросеть, памяти и диска понадобится особенно много — подробности в статье про Ollama.
Чтобы заранее видеть, что память или диск на исходе, настройте мониторинг — см. статью Prometheus и Grafana.
>








