'How do "Started", "Finished" Threads relate to Virtual Users in JMeter
Here is the JMeter Load test Scenario:
500 VU Load ( Spread across 50 Docker instances, with 10 VU each )
I am using bzm - Concurrency Thread Group, with:
Target Concurrency: 10
Ramp up Time: 300 Sec
Ramp Up Steps Count: 12
Hold Target Rate Time ( sec ) : 150
I am using "Once Only Controller", with a total of 5 Samples

start: Thu May 12 15:02:22 UTC 2022
end: Thu May 12 15:12:49 UTC 2022
If we look at the last few lines of the log:
summary + 168 in 00:00:29 = 5.7/s Avg: 42368 Min: 268 Max: 102718 Err: 38 (22.62%) Active: 423 Started: 32453 Finished: 32122
summary = 1197 in 00:04:51 = 4.1/s Avg: 20447 Min: 8 Max: 102718 Err: 179 (14.95%)
summary + 171 in 00:00:31 = 5.6/s Avg: 52979 Min: 1817 Max: 108987 Err: 57 (33.33%) Active: 456 Started: 185979 Finished: 185615
summary = 1368 in 00:05:22 = 4.2/s Avg: 24513 Min: 8 Max: 108987 Err: 236 (17.25%)
summary + 165 in 00:00:31 = 5.2/s Avg: 47737 Min: 2400 Max: 135806 Err: 92 (55.76%) Active: 469 Started: 465197 Finished: 464820
summary = 1533 in 00:05:53 = 4.3/s Avg: 27013 Min: 8 Max: 135806 Err: 328 (21.40%)
summary + 226 in 00:00:28 = 8.1/s Avg: 45517 Min: 2391 Max: 138464 Err: 136 (60.18%) Active: 460 Started: 781788 Finished: 781420
summary = 1759 in 00:06:21 = 4.6/s Avg: 29390 Min: 8 Max: 138464 Err: 464 (26.38%)
summary + 213 in 00:00:31 = 7.0/s Avg: 41327 Min: 172 Max: 169472 Err: 121 (56.81%) Active: 452 Started: 1194172 Finished: 1193812
summary = 1972 in 00:06:52 = 4.8/s Avg: 30680 Min: 8 Max: 169472 Err: 585 (29.67%)
summary + 247 in 00:00:29 = 8.4/s Avg: 46833 Min: 305 Max: 189829 Err: 133 (53.85%) Active: 455 Started: 1625193 Finished: 1624830
summary = 2219 in 00:07:21 = 5.0/s Avg: 32478 Min: 8 Max: 189829 Err: 718 (32.36%)
summary + 179 in 00:00:30 = 5.9/s Avg: 49431 Min: 6934 Max: 186370 Err: 68 (37.99%) Active: 389 Started: 2079677 Finished: 2079380
summary = 2398 in 00:07:52 = 5.1/s Avg: 33743 Min: 8 Max: 189829 Err: 786 (32.78%)
summary + 206 in 00:00:31 = 6.7/s Avg: 60255 Min: 35 Max: 204533 Err: 89 (43.20%) Active: 247 Started: 2407457 Finished: 2407302
summary = 2604 in 00:08:22 = 5.2/s Avg: 35841 Min: 8 Max: 204533 Err: 875 (33.60%)
summary + 190 in 00:00:29 = 6.5/s Avg: 52622 Min: 326 Max: 261898 Err: 95 (50.00%) Active: 136 Started: 2502691 Finished: 2502647
summary = 2794 in 00:08:52 = 5.3/s Avg: 36982 Min: 8 Max: 261898 Err: 970 (34.72%)
summary + 282 in 00:00:29 = 9.6/s Avg: 49788 Min: 58 Max: 195675 Err: 140 (49.65%) Active: 14 Started: 2502691 Finished: 2502769
summary = 3076 in 00:09:21 = 5.5/s Avg: 38156 Min: 8 Max: 261898 Err: 1110 (36.09%)
summary + 50 in 00:00:30 = 1.7/s Avg: 29200 Min: 176 Max: 120778 Err: 17 (34.00%) Active: 3 Started: 2502691 Finished: 2502780
summary = 3126 in 00:09:51 = 5.3/s Avg: 38013 Min: 8 Max: 261898 Err: 1127 (36.05%)
summary + 16 in 00:00:12 = 1.3/s Avg: 17752 Min: 236 Max: 37998 Err: 6 (37.50%) Active: 0 Started: 2502691 Finished: 2502783
summary = 3142 in 00:10:03 = 5.2/s Avg: 37909 Min: 8 Max: 261898 Err: 1133 (36.06%)
Tidying up remote @ Thu May 12 15:12:42 GMT 2022 (1652368362418)
... end of run
++ date
+ echo 'END Running Jmeter on Thu May 12 15:12:49 UTC 2022'
10 minutes to run 500 Virtual Threads ( Users )
Q: So, if the Load is 500 Users, how come we have "Started: 2502691" Threads
I try this Explanation: You have Threads (virtual users) defined under Thread Group which mimic real users
JMeter starts threads that execute samplers as fast as they can and generate a certain amount of requests per second. This "request per second" value depends on 2 factors:
- number of virtual users
- your application response time
looking at:
summary + 16 in 00:00:12 = 1.3/s Avg: 17752 Min: 236 Max: 37998 Err: 6 (37.50%) Active: 0 Started: 2502691 Finished: 2502783
and
summary = 3142 in 00:10:03 = 5.2/s Avg: 37909 Min: 8 Max: 261898 Err: 1133 (36.06%)
Does this mean, ( Last Step: 3142 Requests were Fired, took, 10 minutes, and 3 seconds for the whole test, 5.2 Requests Per Second, or 5.2 Threads Per Seconds were Fired?
If you have 500 virtual users and the application response time is 1 second - you will have 500 RPS
If you have 500 virtual users and the application response time is 2 seconds - you will have 250 RPS
If you have 500 virtual users and the application response time is 500 ms - you will have 1000 RPS.
==================================================================== In our case, above, we have 500 VU and the application Response is 200 ms, so the RPS ( Requests Per Second ) is 2500?
so, what do the "Started: 2502691 Finished: 2502783" numbers represent?
Does this mean that 2502783 Threads finished in 10 Minutes, or 4171 Requests Per Second is what the Target system can handle? but how does this relate to 500 VU Load?
But since the response times are higher, so this number should be lower? right?
Solution 1:[1]
I can only think of one possible reason: you have something in "Thread Iterations Limit"
if this is the case - when a thread starts executing all Samplers you have in the Thread Group - it's being shut down and a new thread is being kicked off in order to maintain the defined concurrency.
Also Once Only Controller instructs JMeter to run its children only during the first iteration of the Thread Group, you should use it i.e. if you want to log in once and then run remaining samplers according to the thread group schedule.
So my expectation is that if you:
- Remove Once Only Controller
- Remove the value from "Thread Iterations Limit"
you should have only 500 started virtual users which should be run for 750 seconds.
The actual concurrency is indicated by Active threads number, you can double check it by opening your .jtl results file using Active Threads Over Time listener (can be installed using JMeter Plugins Manager)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Dmitri T |

