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.
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.
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.
No. Next.js renders on one thread per process, so 8 or 16 vCPUs would only add idle cores.
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.
| Service | CPU near the limit | Memory peak |
|---|---|---|
| umami (gets the traffic) | 1.5 cores | 681 MB |
| postgres | 0.05 cores | 78 MB |
- 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
FreeYour first run is free. No card.
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.
Add the target
A repository or a Docker image, the same build you plan to ship.
Choose the load
Pick the number of users and the test window that match the traffic you expect.
Get your number
p95 latency, error rate, and the smallest setup that held up.
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.
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.
The check every production app should pass before real people use it.
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.
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.