your assumption that the slowest thread takes 20sec and the fastest thread
takes 10 sec is false. Usually the difference is in milliseconds and over a
period of time,  it becomes zero. All threads receive their answer in about
the same time..they have to wait or queue for the same time

On Oct 21, 2016 6:31 PM, "Robin D. Wilson" <rwils...@gmail.com> wrote:

> If you have a thread group with 10 HTTP Request samplers in it (or 100, or
> 1000, whatever the number is - the more you have, the more pronounced this
> concern will become), and you run a thread that steps through each of the
> samplers in sequence, some threads will get done sooner than others - that
> is practically guaranteed - since there is no way that the server will
> respond identically quickly to each request.
>
> So, after 1 loop through your test plan you will have a bell curve of
> times it took for each thread to complete the loop. A few threads will have
> completed relatively fast, a few will have completed relatively slower, and
> the bulk of the threads will have completed with times somewhere in the
> middle. Let's say that the fastest thread completes the full set of
> requests for the loop in 10 seconds. And the slowest thread completes the
> loop in 20 seconds. For argument's sake, let's say that the differential
> between fastest and slowest is not necessarily due to the capacity of the
> server, but just an artifact of random chance - the fastest thread caught
> all the green lights, and the slowest thread caught all the red lights
> (e.g., i/o blocking, lock waits, network congestion back offs, etc.)...
>
> If you re-start the loop for each thread, as soon as it completes the last
> loop - then the fast threads will restart much earlier than the loops that
> are completing on the slower end of the curve. In fact, given that the
> 'fastest' time was only 10 seconds, and the slowest time was 20 seconds -
> there is a non-zero chance that the fastest thread could actually complete
> another full loop by the time the slowest thread is completing its first
> full loop.
>
> If you assign the loops based on a pure division of "number of loops /
> number of threads", you will assure that each thread has an equal number of
> loops. But you will also assure that some threads complete their total
> number of loops well before other threads complete their full set of loops.
> Moreover, the longer your test run is, the wider the disparity will be
> between the threads that reach their full loop count early, and the threads
> that finish the full loop count last. Such that, the slower running threads
> may be running their last several loops while the faster threads have
> completely died off - meaning that the last few threads will be running
> while the machine is under a progressively lighter load.
>
> Clearly, you can't help this from happening during the 'last' loop for
> every thread, since each thread must stop once it has completed a full loop
> - if there are no more loops left to run. But if you don't really care how
> many times each thread runs a loop, you could schedule the loops from a
> queue - where instead of pre-calculating the total loops for each thread,
> you just maintained the total number of loops you needed for the test to
> run, and each thread would just decrement the count when it finished its
> previous loop. Once the count drops all the way to '0', all of the threads
> still running would complete their final loops, and the test would be done.
> BUT no threads would be starting new loops while the server was under a
> lighter load (even though they would complete their last loops while the
> load steadily declined).
>
> Sebb's suggestion of just using a CSV file to count the loops accomplishes
> this exact requirement. If I want a test to run 100,000 loops, I just
> supply a CSV file with 100000 records it. Then I set the Thread Group to
> run "Infinite" loops, and set the CSV file to stop on EOF. The test runs
> until the 100000th record is retrieved from the CSV file, and once that
> loop starts - the threads all stop when they finish their most recent loop
> because they can't get another record from the CSV. (HINT: you can give the
> CSV variable a name like 'loop_count', and make your CSV file contain
> records that count up from 1-100000, and you will also gain a variable that
> tells you which loop you were on for specific sets of requests.)
>
> This isn't a huge concern, just a way to make sure that you maintain the
> same relative server load all through the duration of the test.
>
> --
> Robin D. Wilson
> Voice: 512-426-3929
> rwils...@gmail.com
>
> -----Original Message-----
> From: Deepak Goel [mailto:deic...@gmail.com]
> Sent: Friday, October 21, 2016 1:46 AM
> To: JMeter Users List <user@jmeter.apache.org>
> Subject: Re: How would you go about creating a new Thread Group type?
>
> I am not sure I understand your problem correctly...
>
> Why would the load be reduced to 99 threads? As the threads which haven't
> finished their earlier cycle are still running...they are spending time
> finishing their previous request (which would also indicate a problem with
> the server responding the request)
>
> Hey
>
> Namaskara~Nalama~Guten Tag~Bonjour
>
>
>    --
> Keigu
>
> Deepak
> 73500 12833
> www.simtree.net, dee...@simtree.net
> deic...@gmail.com
>
> LinkedIn: www.linkedin.com/in/deicool
> Skype: thumsupdeicool
> Google talk: deicool
> Blog: http://loveandfearless.wordpress.com
> Facebook: http://www.facebook.com/deicool
>
> "Contribute to the world, environment and more :
> http://www.gridrepublic.org "
>
> On Tue, Oct 18, 2016 at 2:38 AM, Robin D. Wilson <rwils...@gmail.com>
> wrote:
>
> > Just throwing this out there - to see if anyone wants to lead a
> > code-level newbie down the right path. I've been using JMeter for
> > 8-9 years now, and really like it. But one thing that bugs me is the
> > way the Thread Group works. Specifically, the idea of the "loops"
> > bothers me.
> >
> >
> >
> > Consider this scenario:
> >
> >
> >
> > 1)     100 "users" (e.g., threads)
> >
> > 2)     10 loops
> >
> > 3)     Test has 10 HTTP Requests in it
> >
> >
> >
> > By this logic, you should end up with 100 (users) X 10 loops X 10 HTTP
> > Requests = 10,000 requests.
> >
> >
> >
> > And you do.
> >
> >
> >
> > BUT, what you actually get when you run the test isn't as clear as you
> > think. It is basically 100 threads, each running 10 times, and each
> > thread loop running 10 HTTP requests in sequence.
> >
> >
> >
> > Here's the problem, if thread 1 completes its 10 loops in 100 seconds,
> > but threads 2-100 take 200 seconds to complete their 10 loops. The
> > load will be reduced to only 99 simultaneous threads (users) for the
> > last 100 seconds of the test run. That's not a 'huge' deal, but it can
> > affect the perception of the test if you look at it more like threads
> > 1-50 finish in 100 seconds, and threads 51-100 take an extra 100
> > seconds after that to complete. Then only half of your test cycle was
> > at the required 'max' load you wanted to create, while the other half
> > was at 50% of the required load. (It is reasonably possible that I'm
> > just misinterpreting how it actually works, but it appears to work
> > like this from my experience since I can see threads continuing to
> > process after some threads appear to stop - and it lasts longer than
> > it takes to get through the entire cycle - sometimes for several
> > minutes at the end of a test run.)
> >
> >
> >
> > I'd like to create a new Thread Group that doesn't assign the thread
> > to the loop until it starts again at the top of the cycle. So if
> > thread-1 finishes really fast, and there are still loops to run - it
> > just picks up another loop and runs it. I would always want to
> > maintain at least 100 threads executing, so long as there were loops
> > left to run. So basically, you multiply the number of loops by the
> > number of threads (1000 in my example), and your 100 threads always
> > restart until there are no loops left to run. Then the longest period
> > you have where you aren't fully loading the servers is just the last
> > loop for every thread.
> >
> >
> >
> > BUT, I am not 100% sure where I would start in the source code. I have
> > programmed before (a long time ago), but if someone could point me in
> > the right direction (like, which source files would need to be
> > modified, and how would I register my new Thread Group as a different
> > option), I think I could figure it out pretty quickly.
> >
> >
> >
> > --
> >
> > Robin D. Wilson
> >
> >  <mailto:rwils...@gmail.com> rwils...@gmail.com
> >
> >
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org
> For additional commands, e-mail: user-h...@jmeter.apache.org
>
>

Reply via email to