Сколько RAM нужно для Owncast
Owncast — это свой собственный аналог Twitch: вы поднимаете его на VPS, стримите туда через OBS по RTMP, а зрители смотрят через браузер, без Google, без блокировок и без чужих правил модерации. Вопрос «сколько нужно памяти» здесь не такой прямой, как для базы данных или чат-бота — расход RAM у Owncast зависит не столько от того, сколько людей смотрит, сколько от того, включили ли вы транскодирование потока в несколько качеств. Разберём по цифрам, чтобы не гадать и не переплачивать за тариф, который вам не нужен.
Содержание
- Из чего складывается память Owncast
- Passthrough без транскодирования: минимальный сценарий
- Транскодирование: где RAM начинает решать
- Зрители и чат: почему это не главный фактор
- Диск и сеть — на что ещё смотреть кроме памяти
- Таблица: сколько RAM брать под конкретный сценарий
- Как проверить реальный расход на своём сервере
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Из чего складывается память Owncast
Owncast написан на Go и распространяется одним бинарником — сам по себе процесс лёгкий, встроенная база SQLite тоже почти ничего не весит. Но вокруг этого ядра крутятся три статьи расхода памяти, и именно они определяют реальный аппетит сервиса:
- Приём и транскодирование потока. Owncast принимает RTMP-поток от OBS и, если вы включили дополнительные качества (variants) в панели администратора, запускает ffmpeg-процессы, которые перекодируют исходный поток в более низкие разрешения и битрейты. Каждый такой процесс — это отдельные буферы кадров в памяти, и чем выше разрешение и частота кадров исходника, тем они тяжелее.
- Упаковка в HLS. Результат (исходный поток и все транскодированные варианты) режется на сегменты
.tsи.m3u8плейлисты для отдачи по протоколу HLS. Сегменты пишутся на диск, но часть буферов держится в памяти до записи — на слабом диске это создаёт дополнительное давление на RAM через кэш страниц ОС. - Раздача зрителям и чат. Сам HTTP-сервер Owncast раздаёт HLS-сегменты и держит WebSocket-соединения для чата. Это самая лёгкая часть — на каждого зрителя уходят единицы мегабайт, а не десятки, потому что видео зрители получают статическими файлами, а не отдельным потоком с сервера.
Из этого следует главный вывод: транскодирование, а не количество зрителей, определяет, сколько RAM вам заложить. Сервер на 100 зрителей без транскодирования съедает меньше памяти, чем сервер на 10 зрителей с тремя дополнительными качествами.
Passthrough без транскодирования: минимальный сценарий
Если вы отдаёте зрителям тот же поток, что пришёл от OBS, без пересжатия (в панели Owncast это режим, когда включён только исходный variant), нагрузка на CPU и RAM минимальна:
- сам процесс Owncast в простое — обычно укладывается в 150-250 МБ;
- под нагрузкой (активный стрим, десятки зрителей, чат) добавляется ещё 100-300 МБ на буферы HLS и сессии;
- итого разумный минимум — 1 ГБ RAM, но с очень небольшим запасом на скачки (обновление ОС, случайный всплеск зрителей, фоновые задачи вроде бэкапа).
На практике для домашнего или клубного стрима без транскодирования 2 ГБ RAM — комфортный минимум: остаётся запас под ОС (Ubuntu/Debian в простое сама по себе держит 150-300 МБ), nginx как reverse proxy для SSL и разовые операции вроде записи VOD на диск.
Важная оговорка: passthrough означает, что зрители со слабым интернетом или маленьким экраном получают тот же битрейт, что и все остальные — качество подстроить под них нельзя. Это осознанный компромисс ради экономии ресурсов сервера.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверТранскодирование: где RAM начинает решать
Как только вы включаете дополнительные качества (например, 1080p исходник + варианты 720p и 480p), Owncast поднимает отдельный процесс ffmpeg на каждый variant. Здесь оценки уже не такие однозначные — точный расход зависит от кодека, пресета скорости кодирования (veryfast, fast, medium — чем медленнее пресет, тем выше качество на бит, но и нагрузка на CPU/RAM больше) и разрешения источника. Ориентировочно закладывайте так:
| Конфигурация транскодинга | Ориентир по RAM | Комментарий |
|---|---|---|
| Только исходный поток (passthrough) | +0-300 МБ | Без ffmpeg-транскодинга вообще |
| Исходник + 1 доп. качество (720p) | +300-600 МБ | Один ffmpeg-процесс на кодирование |
| Исходник + 2-3 доп. качества (720p, 480p, 360p) | +600 МБ - 1,2 ГБ | По ffmpeg-процессу на каждый variant |
| 1080p60 источник + 3-4 качества | +1-2 ГБ | Больше кадров в секунду — больше буферов |
Это именно ориентир, а не измеренный бенчмарк — конкретные цифры на вашем сервере будут отличаться в зависимости от версии ffmpeg, загруженности CPU (при нехватке ядер процессы транскодинга начинают конкурировать за процессорное время, и это тоже сказывается на том, сколько данных копится в буферах) и настроек битрейта каждого variant. Проверить факт легко: запустите стрим с нужной конфигурацией и посмотрите free -h и top под нагрузкой — это надёжнее любой таблицы.
Отдельно стоит сказать про CPU: программное транскодирование (то, что делает ffmpeg по умолчанию) — это в первую очередь нагрузка на процессор, и на слабом VPS с 1-2 виртуальными ядрами транскодирование в несколько качеств будет упираться в CPU раньше, чем в память. Если планируете больше двух дополнительных качеств, берите тариф с 4 ядрами и выше, не только с запасом по RAM.
Зрители и чат: почему это не главный фактор
Многие ожидают, что расход памяти будет линейно расти с числом зрителей, как в схемах с прямой раздачей RTMP или WebRTC. У Owncast это не так, потому что видео зрители получают статическими HLS-файлами через обычный HTTP — сервер просто отдаёт файлы с диска, это дёшево по памяти и хорошо кэшируется ОС.
Реальный расход на зрителей складывается из:
- WebSocket-соединений чата — каждое живое соединение держит небольшой буфер, на практике счёт идёт на десятки-сотни килобайт на зрителя, а не мегабайты;
- HTTP-соединений на раздачу плейлистов — короткоживущие, закрываются между запросами сегментов;
- истории чата в памяти — Owncast хранит недавние сообщения для новых подключений, это тоже некритичная по объёму структура.
На аудитории до нескольких сотен одновременных зрителей память на "зрительскую" часть обычно не станет узким местом — раньше упрётесь в исходящий канал (трафик) или в CPU транскодинга, если он включён. Если у вас ожидается по-настоящему большая аудитория, стоит заранее продумать сколько ресурсов закладывать под стриминг-нагрузку в целом, а не только RAM.
Диск и сеть — на что ещё смотреть кроме памяти
Память — не единственный ресурс, который «сыпется» при недооценке под Owncast:
- Диск. HLS-сегменты пишутся постоянно, пока идёт стрим — на медленном HDD или сетевом хранилище с задержками это создаёт очередь операций записи, которая рикошетом бьёт по памяти (растёт неотданный page cache). Берите SSD или NVMe — разница между SSD и NVMe в VPS здесь ощущается напрямую в стабильности стрима, а не только в цифрах бенчмарков.
- Место под VOD. Если включена запись прошедших трансляций (video-on-demand), считайте отдельно: час стрима в 1080p на разумном битрейте — это несколько гигабайт, и они накапливаются быстро. Это не RAM, а именно дисковое пространство, но нехватка свободного места на диске у Linux тоже может проявляться как нехватка памяти через забитый page cache.
- Исходящий трафик. Каждый зритель скачивает свой поток целиком — при десятках одновременных зрителей на 1080p счёт легко идёт на сотни гигабайт трафика в месяц. Проверьте лимиты тарифа заранее, это отдельная статья расходов от RAM.
- Swap как страховка, а не основа. На тарифах с транскодингом полезно настроить своп нужного размера — не как замену оперативной памяти (диск в разы медленнее RAM, и стрим начнёт лагать при активном использовании подкачки), а как амортизатор от разового всплеска, который иначе привёл бы к OOM-killer и обрыву трансляции.
Таблица: сколько RAM брать под конкретный сценарий
Сводим всё в практические конфигурации — от «просто попробовать» до «постоянный канал с несколькими качествами»:
| RAM | Сценарий | Транскодинг | Примерная аудитория |
|---|---|---|---|
| 1 ГБ | Тест, разовый стрим | Только passthrough | До 10-15 зрителей, без запаса на скачки |
| 2 ГБ | Регулярный небольшой канал | Passthrough или 1 доп. качество | До 30-50 зрителей |
| 4 ГБ | Стабильный канал для сообщества | 2-3 качества (720p/480p/360p) | До 100-150 зрителей |
| 8 ГБ | Активный проект, несколько сервисов на сервере | 3-4 качества, включая 1080p | 150-300+ зрителей, есть запас под VOD и фоновые задачи |
| 16 ГБ | Крупный канал или сервер с транскодингом + записью + другими сервисами | Полный набор качеств, 1080p60 | Сотни зрителей, много параллельных операций |
Для старта с одним каналом без амбиций на мультикачество вполне хватит 2 ГБ. Если сразу знаете, что будете давать зрителям выбор качества — закладывайте 4 ГБ и выше, и держите под рукой 2-4 ядра CPU, иначе транскодинг упрётся в процессор раньше, чем в память.
Как проверить реальный расход на своём сервере
Таблицы выше — это стартовая точка, а не гарантия. Проверить фактический расход просто:
# общая память и swap в реальном времени
free -h
# что именно ест RAM: процесс owncast и ffmpeg-транскодеры
ps aux --sort=-%mem | grep -E 'owncast|ffmpeg' | grep -v grep
# нагрузка по ядрам CPU во время активного стрима
top -o %CPU
Запустите стрим с планируемой конфигурацией качеств на несколько минут, посмотрите на RES (resident memory) у процессов owncast и ffmpeg, и добавьте 30-40% запаса сверху под пиковые моменты (начало стрима, момент, когда все зрители подключились почти одновременно). Если видите, что free -h показывает активное использование swap уже в первые минуты — это сигнал брать тариф на ступень выше, а не оптимизировать дальше.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли запустить Owncast на 512 МБ RAM?
Технически бинарник стартует, но такой запас не оставляет места ни для скачков, ни для ОС и других процессов — при первом же чате с активными зрителями высок риск OOM. Не рекомендуем ниже 1 ГБ даже для теста.
Owncast поддерживает аппаратное (GPU) кодирование, чтобы снизить нагрузку?
Возможности аппаратного ускорения зависят от версии ffmpeg, собранной с нужными кодировщиками, и конкретного релиза Owncast — уточняйте в официальной документации проекта под вашу версию, прежде чем закладывать это в план сервера. Без явно настроенного аппаратного ускорения транскодинг идёт программно и нагружает в первую очередь CPU.
Что съедает память быстрее — транскодинг или зрители?
Транскодинг с большим отрывом. Раздача HLS зрителям — это, по сути, раздача статических файлов, дешёвая по RAM; каждый дополнительный variant транскодинга — это отдельный процесс ffmpeg с собственными буферами.
Нужен ли отдельный сервер под Owncast, если на VPS уже что-то крутится?
Если это лёгкий сервис (сайт, бот) — можно делить сервер, но во время активного стрима с транскодингом Owncast будет забирать основную часть CPU. Проверяйте это в top заранее, чтобы не получить деградацию соседних сервисов в прямом эфире.
Что произойдёт, если памяти не хватит прямо во время стрима?
Скорее всего сработает OOM-killer и убьёт либо процесс ffmpeg-транскодера (пропадёт одно из качеств), либо сам Owncast (трансляция оборвётся полностью). Держите запас и swap как подстраховку, а не рассчитывайте впритык.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →