1 ГБ и 2 ГБ RAM — это больше в 1 или в 2 раза? Считаем вместе

от автора

Привет, Хабр! На связи команда Рег.облака. Мы запустили программу Free Tier полнофункционального облака с бесшовным переходом в основную инфраструктуру. Теперь любой желающий может заказать абсолютно бесплатно облачный сервер с минимальной конфигурацией с одним виртуальным ядром, 1 ГБ оперативной памяти и 10 ГБ пространства на NVMe-накопителе на срок до 6 месяцев и с возможностью ее расширения по запросу. 

Но статья не об этом. Один-два гигабайта — ресурс ограниченный. И сегодня мы попытаемся разобраться, что в него помещается, какой стек выбрать, на чем можно сэкономить, а на чем не стоит. Будет полезно всем, кто работает с недорогими VPS или оптимизирует расходы на ИТ-инфраструктуру.

Навигация по тексту

Что под капотом

Бесплатный сервер живет в той же инфраструктуре, что и платные ресурсы: Intel Xeon, NVMe-диски, та же сеть, тот же гипервизор. Все пользователи работают на одном и том же оборудовании — машина получает публичный IP и работает как любой другой инстанс. Программа устроена в два шага:

Базовая конфигурация

Расширенная конфигурация

Ресурсы

1 vCPU / 1 ГБ / 10 ГБ NVMe

2 vCPU / 2 ГБ / 10 ГБ или 1 vCPU / 2 ГБ / 20 ГБ

Срок

6 месяцев

3 месяца

Как получить

При регистрации

Запрос через техподдержку

Базовая конфигурация подходит для знакомства с платформой и легких задач. Но если проект чуть серьезнее — бот с базой данных, тестовый стенд с Docker, MVP с несколькими сервисами — стоит сразу запросить расширенную конфигурацию. Второе ядро и удвоенная память открывают заметно больше сценариев, а три месяца — достаточный срок, чтобы обкатать идею и принять решение. Если проект перерос Free Tier, переход на платный тариф — пара кликов, без миграции данных и смены IP.

Мы также готовим следующие этапы программы: FT2 с расширенными конфигурациями (2 vCPU / 2 ГБ / 10 ГБ или 1 vCPU / 2 ГБ / 20 ГБ) и ispmanager one для тех, кому удобнее работать через веб-панель, и FT3 — конфигурация 2 vCPU / 4 ГБ / 40 ГБ с S3, ИИ-токенами и ispmanager lite для B2B-сегмента. Заявки на FT2 уже принимаем.

Арифметика одного (и двух) гигабайт

Прежде чем что-то запускать, стоит понять, сколько памяти «съедает» система и какой бюджет остается приложениям. На Ubuntu 24.04 с минимальным набором сервисов:

Компонент

Потребление RAM

Ядро Linux + системные процессы

~100–150 МБ

systemd, journald, сетевые сервисы

~50–80 МБ

SSH-сервер

~5–10 МБ

Итого на систему

~180–240 МБ

1 ГБ (базовая)

2 ГБ (расширенная)

Остается приложениям

~780–840 МБ

~1 700–1 800 МБ

nginx + FastAPI + PostgreSQL

впритык, нужен тюнинг

с запасом

То же + Redis + фоновые задачи

не влезает

комфортно

Сайт на CMS (WordPress и подобные)

один — можно

два-три с запасом

Docker-контейнеры

один-два максимум

три-четыре сервиса

Разница существенная. На одном гигабайте приходится тщательно выбирать стек и тюнить каждый сервис. На двух — можно работать с привычными инструментами без компромиссов. С сайтами логика та же: один легкий сайт (корпоративный, визитка, блог на WordPress с минимумом плагинов) на 1 ГБ поднимается без проблем, если не ждать шквала трафика. Несколько сайтов на одной машине, особенно на CMS с плагинами и фоновыми задачами, — уже история для 2 ГБ, где каждый nginx-virtual host и пул php-fpm получает свой запас памяти.

Что происходит, если не влезли

Если процессы суммарно запросят больше памяти, чем есть на сервере, ядро Linux включает OOM-killer и убивает самый «прожорливый» процесс. На 1 ГБ это особенно заметно: один всплеск трафика, тяжелый запрос к базе или фоновая задача — и nginx, PostgreSQL или приложение уходит в SIGKILL без предупреждения.

Есть страховочный механизм — swap. Это область на диске, которую ядро использует как дополнительную память: когда физической RAM не хватает, редко используемые страницы выгружаются туда. На NVMe-дисках накладные расходы минимальны, и это спасает от внезапных падений. Но swap — не замена оперативной памяти: если активные процессы начинают в него попадать, производительность проваливается в разы. Задержки на операциях с памятью растут с наносекунд до миллисекунд, и приложение формально живет, но фактически тормозит.

Вывод: на 1 ГБ swap нужен обязательно как подушка безопасности (конкретная настройка — в разделе с практическими советами ниже), но закладываться на то, что он вытянет постоянную нагрузку, нельзя. Если стек регулярно уходит в swap — это сигнал, что пора запрашивать расширенную конфигурацию.

Что помещается: шпаргалка по потреблению памяти

Типичные значения для популярных сервисов при небольшой нагрузке:

Сервис

RAM при минимальной нагрузке

Комментарий

nginx

2–10 МБ

Обратный прокси, раздача статики

Caddy

15–30 МБ

Автоматический HTTPS из коробки

PostgreSQL

30–60 МБ

С настройкой shared_buffers = 64 МБ

SQLite

~0 МБ сверх приложения

Встраивается в процесс приложения, отдельной памяти не требует

Redis

3–10 МБ

На малых объемах данных

Python (Flask/FastAPI)

40–80 МБ

Зависит от зависимостей

Go-бинарник

5–20 МБ

Один из самых экономных вариантов

Node.js (Express)

30–60 МБ

V8 любит память, но при малых нагрузках укладывается

Telegram-бот на Python

30–50 МБ

aiogram / python-telegram-bot

На 800 МБ уживаются nginx + Python-приложение + PostgreSQL — но без Redis и без запаса на пиковые нагрузки. На расширенной конфигурации с 2 ГБ тот же стек работает с запасом, и остается место для кеша, воркеров или мониторинга.

Сколько держит: нагрузочный тест

Арифметика памяти — это половина картины. Вторая половина — сколько запросов в секунду конфигурация реально выдерживает. Прогнали простой сценарий: FastAPI, один POST-эндпоинт, Ubuntu 24.04, стандартные настройки. Нагрузку давали через wrk, замеряли RPS и p95 — задержку, ниже которой укладываются 95 % запросов.

Конфигурация

Что тестировали

RPS

p95

Комментарий

1-1-10

health-чек без БД

~800

~20 мс

Упирается в vCPU

1-1-10

API + PostgreSQL

~250–300

~100 мс

Периодические 5xx на пиках

2-2-10

API + PostgreSQL

~500

< 70 мс

Без ошибок, запас по CPU

Что из этого видно? На базовой 1-1-10 простой отдающий сервис (health-чек, статический API, легкий прокси) спокойно держит сотни запросов в секунду — ограничением становится процессор, а не память. Но как только появляется полноценная БД, картина меняется: PostgreSQL начинает конкурировать за память и CPU с приложением, и на пиках уже ловятся 5xx-ошибки. На 2-2-10 того же API с PostgreSQL хватает на стабильные 500 RPS с запасом по ресурсам.

Вывод: для лендинга, MVP с SQLite, Telegram-бота или прокси-сервиса базовой конфигурации хватает с головой. Если проект предполагает реляционную базу и хоть какую-то заметную нагрузку — лучше сразу идти на расширенную, не тратя время на тюнинг того, что решается дополнительным гигабайтом.

Сценарий 1. MVP и прототипы

На старте проекта каждый рубль на счету — и логично направить бюджет в продукт, а не в инфраструктуру. Free Tier позволяет развернуть бэкенд, поднять базу данных и выкатить сервис на публичный адрес без затрат на серверы.

Ключевое отличие от локальной разработки — сервис сразу доступен извне. Можно привязать домен, дать ссылку первым пользователям и собрать обратную связь на реальном трафике, а не на localhost.

На базовой конфигурации (1-1-10) получится поднять легкий стек: статический фронтенд + API на Go или Python + SQLite. Если в MVP нужны PostgreSQL, Redis и фоновые воркеры — лучше сразу запросить 2-2-10: два ядра и два гигабайта позволяют не экономить на архитектуре и сфокусироваться на продукте.

Когда MVP подтвердил востребованность, масштабирование происходит в рамках той же платформы.

Пример. Два разработчика строят SaaS для генерации коммерческих предложений. Начинают на 1-1-10 с Caddy + FastAPI + SQLite — потребление около 100–150 МБ. Через две недели появляется потребность в полнотекстовом поиске и очереди задач. Добавляют PostgreSQL и Redis — на одном гигабайте стек уже не помещается. Запрашивают апгрейд до 2-2-10, разворачивают полный стек с запасом, привязывают домен и пускают тридцать бета-тестеров. Если к концу бесплатного периода продукт подтвердил спрос — переходят на платный тариф. 

Сценарий 2. Внутренние инструменты и автоматизация

В любой команде есть задачи, которые не дотягивают до отдельного проекта: бот для напоминаний, скрипт сбора метрик, cron-задача для отчетов. Обычно их запускают на рабочем ноутбуке — и они умирают вместе с закрытой крышкой.

На базовой конфигурации помещаются два-три легких сервиса: пара ботов и cron-скрипт. Если хочется собрать на одном сервере целую связку инструментов — мониторинг, автоматизацию и бота — расширенная конфигурация с 2 ГБ даст для этого пространство.

Что помещается на 1-1-10:

  • два-три Telegram/Slack-бота (30–50 МБ каждый);

  • cron-скрипты для сбора данных и отправки отчетов;

  • скрипты мониторинга или healthcheck-сервис (~50–150 МБ).

Что комфортно работает на 2-2-10:

  • всё перечисленное выше одновременно;

  • n8n или Huginn для автоматизаций (~150–300 МБ);

  • Gitea или Forgejo для небольшой команды (~100–150 МБ);

  • несколько Docker-контейнеров.

Пример. Аналитик написал Python-скрипт: раз в месяц собирает данные из пяти рекламных кабинетов и отправляет сводку в корпоративный мессенджер. Начали с 1-1-10 — скрипт отлично работает по cron. Потом команда добавила бота для дежурных и Uptime Kuma для мониторинга клиентских сайтов. Когда стало тесновато — запросили 2-2-10 и развернули всё на одном сервере.

Сценарий 3. Тестовый стенд

Тестировать обновления на продакшне — конечно, плохая идея, но создавать отдельный платный стенд ради пары прогонов тоже расточительно. Еще хуже — поднимать тестовую среду локально: окружение отличается от боевого, и баги, пойманные на ноутбуке, не воспроизводятся в продакшне.

Free Tier закрывает этот сценарий. Тестовый сервер живет в той же экосистеме, что и продуктивный, — одинаковые образы ОС, одинаковая сеть. Ресурсы Free Tier можно включить в приватную сеть с другими ресурсами Рег.облака — тестовый стенд будет максимально приближен к боевому окружению.

Для smoke-тестов и проверки отдельных компонентов хватит 1-1-10. Если нужно развернуть полноценную копию приложения с базой данных и прогнать нагрузочный тест — стоит запросить 2-2-10 или 1-2-20 (второй вариант дает 20 ГБ диска, что важно при работе с дампами).

Пример. Интернет-магазин готовит новый фильтр каталога. Команда запрашивает 1-2-20, разворачивает копию с дампом базы, прогоняет 500 тестовых запросов, находит узкое место в кешировании. Исправляют — и выкатывают в продакшн.

Как выжать максимум из минимального сервера

Эти рекомендации работают не только для Free Tier, но и для любых серверов с ограниченными ресурсами. Впрочем, если задача позволяет, самый простой способ выжать максимум — запросить расширенную конфигурацию и не тратить время на оптимизацию того, что можно решить дополнительным гигабайтом.

Настройте swap

С одним гигабайтом RAM swap обязателен. Он не заменит оперативную память по скорости, но спасет от OOM-киллера при пиковых нагрузках. На NVMe штраф за обращение к swap минимальный.

fallocate -l 512M /swapfilechmod 600 /swapfilemkswap /swapfileswapon /swapfileecho '/swapfile none swap sw 0 0' >> /etc/fstabecho 'vm.swappiness=10' >> /etc/sysctl.confsysctl -p

swappiness=10 означает, что ядро будет использовать swap только при дефиците свободной памяти — именно то, что нужно на NVMe. На расширенной конфигурации с 2 ГБ swap тоже не помешает, но острой необходимости уже нет.

Затюньте PostgreSQL под малый объем RAM

Дефолтные настройки PostgreSQL рассчитаны на сервер с запасом ресурсов. На 1 ГБ стоит выставить:

shared_buffers = 64MB

work_mem = 2MB

maintenance_work_mem = 32MB

effective_cache_size = 256MB

max_connections = 20

На 2 ГБ можно позволить себе более щедрые настройки — shared_buffers = 256MB, work_mem = 4MB — и PostgreSQL начнет работать заметно отзывчивее.

Или рассмотрите SQLite — для нагрузок до ~100 записей в секунду он справляется без отдельного процесса и не потребляет RAM сверх приложения. Litestream решает проблему бэкапов, реплицируя WAL в S3.

Выбирайте легкие альтернативы

Тяжелый вариант

Легкая замена

Экономия RAM

GitLab (~2–4 ГБ)

Gitea / Forgejo (~100 МБ)

~2 ГБ

Grafana + Prometheus (~500 МБ)

Uptime Kuma (~100 МБ)

~400 МБ

WordPress (~150–300 МБ)

Hugo / 11ty + nginx (~10 МБ)

~200 МБ

полноценный Docker

Podman rootless

экономнее по памяти, без демона

Не тащите Docker, если не нужен

Docker-демон и контейнерный рантайм расходуют 50–100 МБ сверху. На базовой конфигурации с 1 ГБ это ощутимо — systemd-юниты справятся проще и экономнее. На расширенной конфигурации с 2 ГБ Docker уже вписывается: можно запустить docker compose с двумя-тремя сервисами.

Следите за потреблением

На сервере с 1 ГБ каждый процесс на счету. Привычка мониторить расход поможет поймать утечки до того, как сработает OOM-киллер:

# Топ процессов по памятиps aux --sort=-%mem | head -15# Мониторинг в реальном времениhtop

А вот когда Free Tier уже не достаточно

Ограничения стоит понимать заранее:

  • тяжелые базы данных с большими объемами данных — PostgreSQL будет работать, но при активной нагрузке и/или большом количестве данных даже 2 ГБ RAM станут узким местом;

  • ML-инференс и ресурсоемкие вычисления — двух ядер не хватит;

  • продакшн-трафик свыше нескольких сотен запросов в минуту;

  • хранение больших объемов — 20 ГБ на диске (в конфигурации 1-2-20) заканчиваются быстро, если речь о медиафайлах.

Для задач посерьезнее есть платные конфигурации, на которые можно перейти в любой момент без миграции. А для юрлиц мы готовим FT3 с конфигурацией 2 vCPU / 4 ГБ / 40 ГБ, S3 и ИИ-токенами.

Для получения сервера нужна идентификация — разовый платеж 100 ₽, который возвращается или остается на балансе. После этого сервер готов к работе. Если понимаете, что задача требует больше ресурсов, то можно запросить  расширенную конфигурацию через техподдержку.


1 vCPU и 1 ГБ RAM — достаточно, чтобы начать. 2 vCPU и 2 ГБ — достаточно, чтобы не отвлекаться на ограничения и сосредоточиться на проекте. Какой самый полезный сервис вам удавалось запустить на минимальном железе? Делитесь кейсами в комментариях!

ссылка на оригинал статьи https://habr.com/ru/articles/1029048/