Skip to content

JMeter Throughput Stuck Below Target RPS

Fix JMeter throughput stuck below target RPS: thread sizing, response time growth, listeners, think time, coordinated omission, and injector limits.

Difficulty
intermediate
Guide type
troubleshooting
Estimated read time
7 min read
Last verified version
Verified JMeter 5.6

Throughput stuck / not reaching target RPS

Section titled “Throughput stuck / not reaching target RPS”
  • You aimed for a target requests per second (or “users”) but the dashboard hits/s or throughput plateaus lower
  • Active threads may be high while throughput stays flat
  • Latency percentiles rise as you add threads
  • Results can look “too good” if you under-issue load relative to the schedule (coordinated omission)
CauseWhat to check
Not enough threads for target RPSLittle’s Law style sizing: threads ≈ RPS × response time (seconds) when busy (Thread Calculator)
Response time grew under loadServer saturation; each thread completes fewer iterations
View Results Tree / heavy listenersInjector CPU burned on UI I/O (best practices)
Think time / timersBy design lower RPS; expected for paced users
Assertions and scripting costToo many expensive checks/scripts per sample
Injector CPU, NIC, or heap pressureOne machine cannot generate the offered load
SUT throttlingRate limits, pool exhaustion, 429/503
Ramp still runningSteady-state not reached yet

Official best practices: incorrect thread sizing contributes to coordinated omission and inaccurate results. Use CLI for real load: jmeter -n -t plan.jmx -l results.jtl.

  1. Measure average response time with a small pilot under CLI.
  2. Estimate threads with the Thread Calculator; add ramp-up (avoid 0-second ramp to huge threads).
  3. Disable heavy listeners; write results with -l only.
  4. Run long enough to leave ramp and warm-up.
  5. Compare achieved hits/s to target; if RT rose, recompute threads or lower target.
  6. Use the Coordinated Omission helper when actual RPS is below target RPS to quantify skew.
  7. Check injector CPU and GC; raise heap only if needed (Heap Estimator), or split engines (distributed testing).
  8. Inspect SUT metrics (CPU, DB pools, rate limits) before adding infinite threads.
  9. Gate CI on error % and percentiles, not only “threads configured” (CI/CD, APDEX/SLOs).
ResourceUse when
Thread CalculatorInitial concurrency
Coordinated OmissionActual RPS below target
Best practicesLean load generation
Socket closed / resetErrors cap throughput

No. After the server saturates, extra threads mostly increase queueing and response time, not useful throughput.

Why is calculated RPS higher than the dashboard?

Section titled “Why is calculated RPS higher than the dashboard?”

Calculators assume stable service time and little think time. Under load, service time rises and timers reduce rate.

Is flat throughput with rising errors a success?

Section titled “Is flat throughput with rising errors a success?”

No. Prefer healthy throughput with low error % and controlled percentiles (glossary).

On this page