An 8-vCPU, 32 GB server choked on a 3-person 1080p LiveKit call — the bottleneck was outbound bandwidth
Description and use
A LiveKit server with a fixed 10 Mbps outbound limit choked when a third participant joined a 1080p call, revealing that outbound bandwidth, not CPU or RAM, was the bottleneck. The team decided to use metered egress traffic instead of a fixed low‑bandwidth plan.
Problem
A self-hosted LiveKit video meeting server with a fixed 10 Mbps outbound bandwidth cap could not support a third participant in a 1080p call, causing video freeze.
Outcome
The fixed 10 Mbps outbound limit caused packet loss when a third participant joined; outbound bandwidth, not CPU or RAM, was the limiting factor. The team learned to calculate SFU egress and opted for metered traffic plans.
Workflow
- 1. Deploy LiveKit Server and Egress via Docker using official templates.
2. Observe 1‑on‑1 1080p call uses ~8 Mbps outbound.
3. Add a third participant; outbound demand rises to ~24 Mbps, exceeding the 10 Mbps cap.
4. Identify that LiveKit is an SFU and outbound bandwidth grows as N×(N‑1)×4 Mbps.
5. Use LiveKit CLI
lk load-testto simulate traffic before production. 6. Conclude that fixed‑bandwidth plans are unsuitable for SFU workloads and switch to metered egress with high burst ceiling.
Evidence
The VM looked generous on paper: 8 vCPUs, 32 GB RAM, and a fixed 10 Mbps public bandwidth plan
In practice, 1080p worked fine with two people in a room. The moment a third person joined with their camera on, video froze.
LiveKit is a Selective Forwarding Unit (SFU). Every participant uploads their camera stream once to the server, and the server forwards separate copies down to everyone else in the room.
On a cloud VM with a 10 Mbps outbound cap: A 1-on-1 call uses ~8 Mbps—just under the ceiling. A 3rd person pushes outbound demand to ~24 Mbps—instant packet loss and frozen frames, while the 8 vCPUs and 32 GB RAM sit mostly idle.
Before going to production, LiveKit's CLI includes lk load-test to simulate publishers and subscribers against your actual box instead of guessing.
- Record date: 2026-11-01T15:14:14.124Z