← All Tools

Erlang C / M/M/c Queue Calculator

Given a Poisson arrival rate λ, an exponential mean service time 1/μ, and c identical servers, the Erlang C formula predicts the probability an arriving job has to wait, how long the average wait is, and how long the queue gets. Use it to size call centers, thread pools, connection pools, backend replicas — anything with a shared queue in front of a fixed pool of workers.

Workload

How many jobs arrive per unit time. Assumes Poisson arrivals (independent, memoryless).
Mean time one server takes per job. Assumes exponential service (some short, some long, same mean).
agents
Number of identical, independent servers pulling from the same FIFO queue.
Target: the fraction of jobs whose in-queue wait should be at most this. Reported as service level below.

Results

Wait-time survival P(wait > t):

Staffing Sweep

Same λ and 1/μ, varying c. Highlighted row is the minimum staff level that meets your SLA (target service level ≥ 80%).

%

About Erlang C

Agner Krarup Erlang published the formula in 1917 while working out how many telephone circuits a Copenhagen switchboard needed. The model — Poisson arrivals, exponential service, c parallel servers, unbounded FIFO queue, no reneging — is written in Kendall notation as M/M/c. It stays useful a century later because most real-world contention (threads waiting for a DB connection, requests queued behind CPUs, callers waiting for an agent) sits close enough to those assumptions for the numbers to be actionable.

Key formulae

  • Offered load a = λ/μ (Erlangs). Dimensionless "amount of continuous work".
  • Utilization ρ = a/c. Must be strictly below 1 or the queue grows without bound.
  • Erlang B (loss / blocking): B(c,a) = (ac/c!) / Σk=0..c ak/k! — computed with the stable recursion B(k) = a·B(k-1) / (k + a·B(k-1)).
  • Erlang C (probability of any wait): C = c·B / (c − a + a·B).
  • Average queue wait Wq = C / (cμ − λ). Total sojourn W = Wq + 1/μ.
  • Queue length Lq = λ·Wq (Little's law).
  • Service level SL(t) = 1 − C·e−(cμ−λ)t.

Where Erlang C gets optimistic

  • Assumes callers wait forever; real callers abandon (use Erlang A for reneging).
  • Assumes service times are exponential; if they are heavy-tailed, wait times balloon (M/G/c or simulation).
  • Assumes homogeneous servers and single skill; skill-based routing needs a bigger model.
  • Predicts steady state; brief bursts of arrivals well above λ still cause transient queues.

As a rule of thumb, staffing much beyond ρ ≈ 0.85 pays for itself only when the tail matters — the SLA sweep below shows exactly how much each extra server buys you.