Performance Testing for High-Concurrency User Traffic

Ramp to 2,000 concurrent users in ten steps and find the level where response time bends and errors start. Config, thresholds and a k6 script included.


Find the user count where your site stops scaling

Most capacity questions are one question: at how many concurrent users does response time stop being flat? This template answers it with a stepped ramp to 2,000 users held for ten minutes, so the results page can show response time against user level and mark the step where the curve bends. It is the general-purpose capacity test; the other templates are variations of it for a specific stack or failure mode.

Configuration

SettingValueWhy
Virtual users2,000Well above a typical mid-size site’s daily peak; the point is to pass the ceiling, not to confirm the comfortable number.
Duration15 minutesFive minutes of ramp, ten at the top. Long enough for caches to warm and auto-scaling to add capacity.
Ramp-up300 s in 10 steps200 users every 30 seconds gives ten readable levels on the response-time-versus-users chart.
RequestsYour 5 most visited pages or endpointsWeighted by real traffic if you know it; otherwise equal.
Think time2 to 5 sA user reads a page before the next click; without a pause 2,000 users behave like 20,000.
Regions1 to start, 3 for the real runUse one region to find the ceiling, then confirm it from where your users are.

Run this templateOpens the cloud test form with these values filled in. Free plan runs it at the free user limit; sign in or create a free account first.

The button prefills users, duration and ramp-up. Add the URLs and a think time, then start; on the free plan the user count is capped at the free limit, so run it there first to check the setup and rerun at full size on a paid plan.

What to read in the results

  • Response time by user level. The Overview tab charts mean and p95 against the number of active users. Flat then climbing is normal; the step where it starts climbing is your ceiling, and the capacity panel names that step.
  • Throughput plateau. Requests per second should rise in step with users. When users keep rising and requests per second stop, the server is saturated: every extra user only adds queueing.
  • Errors by status code. 5xx and timeouts at the top of the ramp are capacity; 429s are a rate limiter; 4xx from the start is a setup problem, fix it before reading anything else.

Pass/fail thresholds for this template

ThresholdTargetWhat a breach means
p95 response time< 1,000 msA page takes more than a second for one user in twenty at some level of the ramp.
Error rate< 1%Requests fail under load; find the level where they start.
Throughput> your expected peak requests/sSet from analytics: peak hour page views divided by 3,600, with headroom.

Save them on the test once and every run gets a PASS or FAIL; the Trend tab then shows whether a release moved the ceiling.

The same scenario as a k6 script

The same shape as a k6 script: ten stages, each adding 200 users, then a ten-minute hold. Upload it to a k6 cloud test if you prefer scripts to the form.

import http from 'k6/http';
import { check, sleep } from 'k6';

const steps = [];
for (let i = 1; i <= 10; i++) steps.push({ duration: '30s', target: i * 200 });
steps.push({ duration: '10m', target: 2000 });

export const options = {
  stages: steps,
  thresholds: { http_req_duration: ['p(95)<1000'], http_req_failed: ['rate<0.01'] },
};

const pages = ['/', '/category/shoes', '/product/123', '/search?q=boots', '/api/cart'];

export default function () {
  const res = http.get('https://www.example.com' + pages[Math.floor(Math.random() * pages.length)]);
  check(res, { 'status 200': (r) => r.status === 200 });
  sleep(2 + Math.random() * 3);
}

When to run it

  • Before any event that doubles traffic: a sale, a launch, a campaign, a press mention.
  • After scaling changes new instance sizes, a new database tier, a cache in front of the app.
  • Monthly on a schedule so the ceiling is a number you track, not a surprise.

FAQ on high-concurrency load testing

How do I choose the number of users?

Start from your busiest hour in analytics, convert to concurrent users (sessions per hour times average session length in hours), and set the test two to five times higher. The goal is to pass the ceiling.

Should I use requests per second instead of users?

Users with think time model people; a fixed request rate models an API client. This template models people. For an API, see the REST API stress template.

The results show the free plan’s user count, not 2,000.

The free plan caps virtual users. The prefill is clamped to your plan; upgrade or lower the target to compare like with like.

What does "the curve bends" look like?

Mean and p95 stay roughly flat across the first few levels, then rise with every additional level while throughput stops rising. The capacity panel on the results page marks that level automatically.

How fast is your website?

Elevate its speed and SEO seamlessly with our Free Speed Test.

Outgrown your testing tools?

Load test websites and APIs from 25+ cloud regions, monitor page speed and uptime, and get AI analysis that explains your results in plain English.Start for free
jmeter cloud load testing tool

Free Website Speed Test

Analyze your website's load speed and improve its performance with our free page speed checker.

×