P90, P95 & P99 Latency Simulator
Learn latency percentiles with an interactive simulator. Generate request samples, visualize distributions, compare average latency with P50, P90, P95, and P99, and see how tail latency affects real users.
Category: Monitoring
What You Will Learn
- Understand that P90, P95, and P99 are percentile rank cutoffs
- Visualize how latency distributions create long-tail behavior
- Compare average latency, median latency, and percentile latency
- See why P99 exposes slow requests that averages can hide
- Practice choosing the right latency metric for SLOs and incident response
Topics covered: latency, percentiles, p90, p95, p99, monitoring, observability, sre, performance, slo, educational, interactive
// simulator
P90, P95 & P99 Latency Simulator
Learn latency percentiles with an interactive simulator. Generate request samples, visualize distributions, compare average latency with P50, P90, P95, and P99, and see how tail latency affects real users.
Missions
Goal: Get P95 within 1.3x of P50: a tight, healthy service. Healthy API keeps requests close together.
P50 60ms, P95 90ms, P99 193ms, average 64ms
Latency distribution
The bars show request counts by latency bucket. Vertical lines mark percentile cutoffs.
Sorted request ruler
Requests are sorted fastest to slowest. Percentiles are rank positions, not averages.
First 90%
Normal user experience. This is what average dashboards over-emphasize.
Next 9%
Slow requests. P95 is usually where support tickets start to appear.
Slowest 1%
The tail. P99 tells you whether rare paths are painful.
How P90, P95, and P99 latency work
Percentiles are sorted ranks
- P90: sort every request by latency. The P90 value is the point where 90% of requests are at or below that value.
- P95: leaves only the slowest 5% above the cutoff, which makes it useful for SLOs and user-facing dashboards.
- P99: focuses on the slowest 1%, so it exposes rare but painful paths that averages often hide.
Why average is not enough
- A few very slow requests can be invisible when the median and average look normal.
- Tail latency often comes from retries, lock waits, cold starts, cache misses, or slow dependencies.
- Percentiles show how many users are affected, not just how slow the typical request is.
How to use them in practice
- Use P50 to understand the normal request path.
- Use P90 or P95 to track broad user experience and SLO health.
- Use P99 to investigate tail events, capacity limits, and reliability regressions.
Overview
Latency percentiles answer a question averages cannot: how slow are the slowest requests? P90, P95 and P99 are cutoffs in a sorted list of request times. P99 is the time that 99 percent of requests are faster than, so one request in a hundred is slower. This simulator plots a latency distribution with P90, P95 and P99 markers and shows the average and P50 in separate metric cards, so you can see how a long tail moves the high percentiles while the average and median barely change. Five scenarios show common shapes: a healthy API where the percentiles sit close together, cache churn where misses add a visible upper band, a noisy neighbor whose CPU and disk contention stretch the tail, cold starts where a few very slow requests dominate P99, and a rolling deploy where warmup, image pulls and connection churn create a fat tail. The takeaway is practical: an average can look fine while one user in a hundred waits seconds, so SLOs and alerts should be written against high percentiles, and the metric has to match the experience you are promising.
Try this
- Start with "Healthy API" and compare the average, P50 and P99 values in the metric cards.
- Switch to "Cold Starts" and watch P99 jump while the median hardly moves.
- Compare "Cache Churn" and "Noisy Neighbor" to see two different reasons a tail can grow.
Frequently asked questions
- What does P99 latency mean?
- 99 percent of requests completed faster than the P99 value, so 1 percent were slower. It describes the experience of the slowest requests, which averages hide.
- Why is average latency misleading?
- A few very slow requests barely move the average when most are fast, yet those are the requests users notice. Percentiles show the tail directly.
- Can you average percentiles across servers?
- No. The average of each server P99 is not the P99 of all requests. You need the combined distribution, for example from histogram buckets, to compute a correct overall percentile.
Try next
// simulator
Idempotency and Retry Lab
Lose payment responses, replay idempotent requests, compare backoff with full jitter during an outage, and move exhausted jobs to a dead-letter queue.
// simulator
GraphQL N+1 and DataLoader Lab
Trace nested GraphQL resolvers, count N+1 SQL queries, batch users and comments with DataLoader, and discover why a loader cache must stay inside one request.
// simulator
Email Authentication Lab: SPF, DKIM and DMARC
Publish SPF, DKIM and DMARC records, send mail directly and through a forwarder or mailing list, and inspect the receiver’s authentication verdict, alignment and disposition.