LLM Inference Fails Quietly Before It Fails Loudly

Akamai's vLLM load tests show why 200 OK is a weak health signal and why bounded admission, context limits, and an external queue should precede autoscaling.

Retrieval answer

Akamai's vLLM load tests show why 200 OK is a weak health signal and why bounded admission, context limits, and an external queue should precede autoscaling. A self-hosted LLM endpoint can return 200 OK while the product is already unusable.

New Runtime synthesiseditorial-diagram
Hand-drawn LLM serving flow where a burst reaches an external queue and bounded admission gate before a two-phase GPU runtime with a fixed memory boundary.
An LLM endpoint can remain technically healthy while latency collapses. Admission control keeps excess work outside the model runtime where it can be observed and governed.New Runtime synthesis from Akamai's public serving analysisOriginal source ↗

A self-hosted LLM endpoint can return 200 OK while the product is already unusable. Akamai’s Du’An Lightfoot demonstrates the failure on a vLLM deployment: traffic rises, aggregate throughput eventually flattens, and tail latency keeps climbing without a conventional server error.

The mismatch starts below HTTP. A web request is mostly stateless and has a roughly stable cost. An inference request holds state in GPU memory, grows with context, and competes with every other active sequence for a fixed memory-bandwidth and KV-cache budget.

Inference also has two different phases. Prefill processes the prompt in parallel and drives time to first token. Decode generates sequentially and repeatedly reads model weights plus the growing cache from memory. CPU and network dashboards do not explain either bottleneck well.

The batching cliff

Continuous batching is still a major efficiency gain. In Akamai’s example, one request produced about 34 tokens per second, while 64 concurrent requests produced roughly 1,041 aggregate tokens per second. The GPU did more useful work per model-weight read.

But batching has a cliff. Once new work arrives faster than the engine can prefill it, throughput stops increasing and the queue grows. Each user receives fewer tokens per second, then P95 latency rises even though the endpoint stays alive.

The memory failure looks similar. The test GPU had 20 GB of VRAM, with about 14 GB occupied by model weights and roughly 38,800 tokens of KV-cache capacity left. Thirty-two requests carrying 4,000-token prompts demanded 128,000 cache tokens. The result was not a crash. Time to first token rose toward 55 seconds while the error rate stayed at zero.

Put the waiting room outside the engine

The corrective pattern is bounded admission. Akamai capped vLLM with --max-num-seqs=8 and --max-model-len=8192, then kept excess work in a gateway queue outside the model server.

An external queue can expose depth, reject quickly, prioritize, rate-limit, or shed work. An internal unbounded queue can only make requests wait invisibly. With the same hardware, admitted work stayed close to baseline latency and the remainder waited predictably.

Autoscaling still matters, but it reacts to measurements after load arrives. Backpressure is the mechanism that keeps the first burst from collapsing the runtime before another replica becomes useful.

Source

Recommendation

Akamai's vLLM load tests show why 200 OK is a weak health signal and why bounded admission, context limits, and an external queue should precede autoscaling.

Discovery graph / next reads

Continue through New Runtime

Open the graph
  1. 01topicAPI Design - New RuntimeExplore the api design topic hub.
  2. 02topicInfrastructure - New RuntimeExplore the infrastructure topic hub.
  3. 03related materialLangSmith LLM Gateway Puts Runtime Controls Between Agents and ModelsShares api design and infrastructure.
  4. 04related materialVercel Passport Makes Identity a Deployment BoundaryShares api design and infrastructure.
  5. 05related materialUnlimited OCR Treats a Long Document as One Parsing HorizonShares ai models and infrastructure.

These links are also published in this page’s JSON twin and as typed edges in DiscoveryGraph v1.

Who read this page?Machine requests, hidden until opened

Loading the privacy-safe route aggregate…

Open the JSON contract