Load test your app. No scripts to write.

Point Stresix at a repo or a Docker image. It sends real traffic at it on throwaway servers, then tells you what ran out first (CPU, one core, memory or the database) and whether a bigger server would actually help.

FreeFirst run free. No card.

Real report
Standard run, measured
2,500 users held, no bigger server needed
p95707 ms
throughput2,600 rps

Most apps run on a bigger server than they need.

Picking a server size is usually a guess, and the guess that feels safe is the bigger one. That headroom is paid for every month, whether traffic ever reaches it or not.

Stresix measures instead. It runs your app on a known server, sends real load at it, and reports what happened. We don't sell hosting, so the result has no reason to lean either way, and if your current setup is enough, the report says so.

Real reports

Pick a stack, see the report.

Three real runs, and the same report you get. Nobody wrote a test script for any of them, because the question is the same for every app: what runs out first, and would a bigger server help.

The answer

A bigger server would not help. One Node thread ran out first.

Near 500 users the app stopped getting faster and held at about 290 requests a second. Past that, extra requests waited until the 10 second timeout. The server was about 40% busy and Postgres was nearly idle, but the Node thread doing the rendering sat at 100% of one core for the whole run.

Would a bigger server help?

No. Next.js renders on one thread per process, so 8 or 16 vCPUs would only add idle cores.

What to do

Keep the 4 vCPU / 8 GB server and run one app process per core. The report projects 610 to 870 requests a second after that, at no extra cost.

Real report
Umami, from its own compose file
Limit found
500 users before requests started timing out
ceiling290 rps
p95 past it1.76 s
Whole server~40%CPU across 4 vCPU
Busiest thread100%of one core, start to finish
Memory1.4 GBused of 8 GB
Timed out25%of requests, 42% by the end, no 5xx
ServiceCPU near the limitMemory peak
umami (gets the traffic)1.5 cores681 MB
postgres0.05 cores78 MB
Test conditions
Input
The umami repo (github.com/umami-software/umami) and its docker-compose.yml, no changes
Ran on
4 vCPU / 8 GB (shared vCPU), app and Postgres on the same server
Load
2,500 simulated users over a 10 minute ramp, all on the home page
Not covered
The tracking endpoint, which hits Postgres on every request
Read the full report
Now try it on your app

FreeYour first run is free. No card.

How it works

Three decisions. The rest is measured.

Most load testing tools hand you a wall of metrics and leave the conclusion to you. Stresix runs the test and turns the result into a server size you can deploy on.

1

Add the target

A repository or a Docker image, the same build you plan to ship.

2

Choose the load

Pick the number of users and the test window that match the traffic you expect.

3

Get your number

p95 latency, error rate, and the smallest setup that held up.

Sample run
Load ramping up
2,500 concurrent users
What runs

How your app is built and run.

The numbers only mean something if you know what ran. Here is exactly what happens to your code.

Build

From a repository, Stresix builds the branch you pick. A docker-compose file runs your whole stack; otherwise a Dockerfile is used if there is one, and Nixpacks detects the rest. Private repositories work through the Stresix GitHub App. You can also skip the build and give a Docker image.

Run

Your container runs alone on a fresh server: 4 vCPU / 8 GB for Standard, 8 vCPU / 16 GB for Massive, on EU servers. PORT is set, and Stresix finds your app on it or on 80, 3000, 5000, 8000 or 8080. The load comes from a second server on a private network.

Connect

Got a docker-compose.yml? Your app, database and cache all run together on the test server, fresh and private, and each one is measured on its own so you see which one ran out first. Without compose, point your app at a test database with environment variables (encrypted while stored, deleted after the run).

I built this because I kept getting server sizing wrong myself. I overbought a box for a project that got maybe 40 visitors a day and paid for months of headroom nothing ever touched. Then I underbought the next one and watched it fall over on the one day it actually mattered.

I did that loop enough times that I got sick of guessing. I'm not trying to sell you a bigger server or lock you into a hosting provider. I want you to spend the least amount of money that keeps your app up. That's the whole product.

Matei Toma (devmatei). More about who's behind this, or see my other work at devmatei.com.

Choose your ceiling

Pick the question you're actually asking.

Standard covers normal production traffic. Massive covers a launch or a spike. Both end with the same kind of report.

StandardRecommended
2,500 concurrent users10 minute window1 credit per run

The check every production app should pass before real people use it.

Massive
10,000 concurrent users15 minute window3 credits per run

For launch day, a big announcement, or any spike well above normal traffic. Find out what surviving it costs before it happens.

Credits come in packs: Starter is $10 for 5 credits, Pro is $40 for 25. Credits do not expire, and a run that fails because of Stresix gives its credits back.

Choose Standard
Your workspace starts here

Find out what your app can handle.

Save a target, pick a load, and get a number you can deploy on. Setting up a test is free, and so is your first run.

Your first run is free, no card
After that, $10 for 5 runs, credits never expire
A full report when the run ends, 4 to 15 minutes
Runs on isolated servers, deleted afterward
Create workspaceSign in

8 or more characters.