Telegram-бот выглядит тяжёлой задачей: он работает сутками, отвечает людям, что-то запоминает. На практике обычный бот на Python занимает 10–20 МБ памяти — меньше, чем одна вкладка браузера. Рассказываем, на что реально уходят RAM и CPU, как это замерить своими руками и почему на скромном тарифе спокойно живут несколько ботов.
Сколько памяти бот занимает на самом деле
Возьмите замер, а не предположение. Запустите бота и посмотрите, сколько памяти съедает процесс:
ps -eo rss,comm --sort=-rss | head -5
Колонка RSS — это резидентная память в килобайтах. У бота с десятком команд на aiogram или python-telegram-bot значение держится в районе 10 000–20 000 КБ, то есть те самые 10–20 МБ. В контейнере картина похожая:
docker stats --no-stream
Итог замера обычно обескураживает. Люди ждут сотни мегабайт и покупают сервер «с запасом», а на графике видят полосу, едва отличимую от нуля.
Почему число пользователей почти не влияет
Переписка бота хранится не у вас. Сообщения, истории, файлы — всё лежит на серверах Telegram, а в память вашего процесса попадают только код и объекты библиотеки. Поэтому бот с сотней пользователей в день и бот с тысячей потребляют почти одинаково.
Бот между сообщениями просто ждёт. Он не крутит цикл и не считает ничего в фоне: пока не пришло сообщение, потребление CPU близко к нулю. Растёт оно только в момент обработки запроса — и снова падает.
Что действительно добавляет память — число одновременных обработчиков. Если бот держит долгие операции параллельно, каждый активный обработчик добавляет немного. Но даже сотня параллельных диалогов — это единицы мегабайт, а не гигабайты. Ограничение упирается в код, а не в количество подписчиков.
Что съедает память сильнее всего
Каждая тяжёлая библиотека — отдельный «этаж» памяти. Вот типичные значения RSS для разных ботов:
| Тип бота | RSS в простое | Что внутри |
|---|---|---|
| Текстовый на aiogram / Telegraf | 10–25 МБ | только библиотека бота |
| С SQLite и фоновыми задачами | 30–60 МБ | драйвер БД, планировщик |
| С обработкой картинок | 80–200 МБ | Pillow, ffmpeg |
| С локальной ML-моделью | 500 МБ и выше | веса модели в памяти |
Главный фактор — импорты, а не количество кода. Разница между ботом на 50 строк и ботом на 500 строк почти незаметна, а вот подключение обработки изображений или нейросетевой модели меняет цифру в разы. Если такая библиотека не нужна постоянно — не импортируйте её на старте.
Сколько CPU нужно боту
CPU нужен всплесками. В простое бот почти не занимает процессор, а в момент ответа ему хватает доли ядра на миллисекунды. Практически любому текстовому боту достаточно 0,2–0,3 ядра, а один vCPU полностью закрывает потребности даже при заметном потоке сообщений.
Нехватка CPU видно иначе, чем нехватка памяти. Если бот отвечает, но с задержкой, которая растёт вместе с числом одновременных сообщений, — это упор в процессор или в медленный внешний сервис. Если же бот внезапно пропадает и перезапускается, дело почти всегда в памяти, а не в ядрах.
Почему 2 ГБ RAM хватает нескольким ботам
Считайте по факту, а не по страху. Одному боту с базой нужно 30–60 МБ. На тарифе Starter — 990 ₽/мес, первый месяц бесплатно — даётся 1 vCPU, 2 ГБ RAM и один проект, и такой объём закрывает бота с многократным запасом. Контейнер на Dockbox работает постоянно: лимита по времени и «засыпания» нет, бот ждёт сообщения круглосуточно.
Если проектов несколько, память делится. Тариф Pro — 2 490 ₽/мес — это 2 vCPU, 4 ГБ RAM, до пяти проектов и свой домен. Даже разложив 4 ГБ на пять ботов, каждому достаётся около 800 МБ — в разы больше, чем он реально просит. Team — 4 990 ₽/мес — для тех, кому нужны ещё больше ресурсов, проектов и SLA. Актуальные условия — на dockbox.host.
Реальный предел — это число проектов в тарифе, а не объём RAM. Купить «сервер побольше» под одного текстового бота почти всегда означает платить за память, которая не будет использована.
Как понять, что ресурсов не хватило
Перезапуски без осмысленной ошибки — это память. Классическая картина: логи обрываются на середине работы, в логе нет внятного исключения, а процесс стартует заново. Это не баг кода, а исчерпание памяти.
Растущая задержка — это процессор или внешний сервис. Бот отвечает, но всё медленнее — проверьте, не тормозит ли сторонний API и не выполняется ли тяжёлый SQL-запрос на каждый запрос.
Смотрите на цифры, а не на ощущения. Прежде чем менять тариф, откройте графики потребления памяти и CPU по проекту: чаще всего там видно, что бот использует малую долю доступного, а медлительность приходит извне.
База данных живёт на диске, а не в памяти
Файл базы не должен лежать рядом с кодом. Если бот хранит пользователей, заказы или настройки, базу нужно держать в постоянном хранилище, а не во временной папке проекта. Тогда она не потеряется при следующей публикации кода.
На Dockbox диск сохраняется между перезапусками. Данные переживают и обновление версии, и перезапуск контейнера — вам не нужно заново настраивать SQLite после каждого деплоя. А перед крупным обновлением стоит сделать резервную копию базы: это занимает минуту и снимает лишний риск.
Итог
Боту нужен не большой сервер, а небольшой, который никогда не выключается. 2 ГБ RAM и один vCPU закрывают текстового бота с базой с огромным запасом; память уходит на библиотеки, а не на число пользователей. Загрузите бота на Dockbox и посмотрите в панели, сколько он ест на самом деле — первый месяц на Starter бесплатный, а контейнер работает без остановок.
Смотрите также: хостинг бота на aiogram и несколько ботов на одном тарифе.
Частые вопросы
Сколько RAM нужно Telegram-боту?
Обычному боту на aiogram, python-telegram-bot или Telegraf хватает десятков мегабайт: типичный замер — 10–20 МБ RSS. Больше нужно только тяжёлым библиотекам: обработке картинок, аналитике, локальной нейросетевой модели.
Влияет ли число подписчиков на потребление памяти?
Почти нет. Память занимают код и импортированные библиотеки, а переписка хранится на серверах Telegram. На загрузку CPU влияет не общее число подписчиков, а число тех, кто пишет одновременно.
Как узнать, сколько памяти ест именно мой бот?
Замерьте процесс командой ps -eo rss,comm --sort=-rss | head -5 или посмотрите потребление контейнера через docker stats --no-stream. Расход памяти и CPU по проекту виден и на графиках в панели Dockbox.
Как отличить нехватку памяти от нехватки CPU?
Нехватка памяти выглядит как внезапный перезапуск процесса и обрыв логов без осмысленной ошибки. Нехватка CPU — бот отвечает, но с задержкой, которая растёт вместе с числом одновременных сообщений.
Хватит ли 2 ГБ RAM на несколько ботов?
С запасом. Одному боту с базой достаточно нескольких десятков мегабайт, поэтому 2 ГБ на Starter закрывают его многократно, а на Pro (4 ГБ, до пяти проектов) остаётся по несколько сотен мегабайт на каждый. Реальный предел — число проектов в тарифе, а не объём памяти.