Skip to content

JMeter Coordinated Omission Calculator

Correct for coordinated omission in JMeter: correction factor, lost requests, adjusted response times, and required threads. Free client-side tool.

Difficulty
advanced
Guide type
how-to
Estimated read time
4 min read
Last verified version
Verified JMeter 5.6

When the server can’t keep up with your target throughput, JMeter’s Thread Group silently drops requests instead of queuing them. This produces artificially low response times and inflated percentiles. Enter your target RPS, actual RPS, average response time, and test duration to compute the correction factor, lost requests, corrected response time, and the thread count you should have used.

Intended throughput (what you configured)
Measured throughput from the test run
Average response time from the test
Total test duration in seconds
Correction factor-
Lost requests-
Corrected avg RT-
Needed threads-
Overload severity-

Heuristic correction based on Gil Tene's queue-depth model. Validate with How NOT to Measure Latency. See Best Practices and Thread Calculator.

Coordinated Omission is a measurement bias that occurs when a load generator schedules the next request at a fixed interval (e.g., every 20 ms for 50 RPS) but fails to account for the time already spent waiting on the previous request.

When the server degrades:

  1. Threads get “stuck” waiting for slow responses.
  2. Fewer requests are sent than the target rate.
  3. The “missing” requests are silently dropped - never queued.
  4. Measured throughput drops, but response times look artificially low.

Example: You target 50 RPS with 100 threads. Server degrades to 5-second response time. Instead of 50 RPS, you get ~20 RPS (100 threads / 5s). Your throughput drops by 60%, and your average response time doesn’t reflect what real users would experience.

The calculator uses the queue-depth model from Gil Tene’s talk How NOT to Measure Latency:

correction_factor = target_RPS / actual_RPS
lost_requests = (target_RPS - actual_RPS) × duration_seconds
queue_depth = (target_RPS - actual_RPS) × (avg_RT_ms / 1000)
corrected_RT = avg_RT_ms + (queue_depth × avg_RT_ms)
needed_threads = target_RPS × (avg_RT_ms / 1000)

When target_RPS > actual_RPS, the correction factor tells you how much your measured metrics are skewed. A factor of 2.5x means your real response time is roughly 2.5× what JMeter reported.

Target RPSActual RPSAvg RTDurationCorrectionLost reqsCorrected RT
50205,000ms60s2.5x1,800~12,500ms
100803,000ms120s1.25x2,400~3,750ms
200200500ms60s1.0x0500ms
  • Percentile correction - the queue-depth model corrects averages; for percentile correction, use a proper histogram (HdrHistogram) in your test.
  • Think time / pacing - real users pause between actions; this calculator assumes continuous load.
  • Server-side queuing - if the server itself queues requests, the corrected RT is a lower bound on what users experience.
  • Distributed test aggregation - run this per engine and combine results.
  1. Run your test and record target RPS, actual RPS, avg response time, and duration.
  2. Use this calculator to compute the correction factor and lost requests.
  3. If the factor is > 1.25, your results are significantly skewed.
  4. Re-run with more threads (use the Thread Calculator) or lower the target RPS.
  5. For accurate percentiles, instrument with HdrHistogram in your JMeter test.
On this page