https://github.com/thoughtscript/perf_tests_2025
Simple Examples for Performance Testing
https://github.com/thoughtscript/perf_tests_2025
docker java spring-boot webflux
Last synced: about 1 month ago
JSON representation
Simple Examples for Performance Testing
- Host: GitHub
- URL: https://github.com/thoughtscript/perf_tests_2025
- Owner: Thoughtscript
- Created: 2025-06-11T23:27:56.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-06-13T02:54:52.000Z (11 months ago)
- Last Synced: 2025-06-13T03:35:50.810Z (11 months ago)
- Topics: docker, java, spring-boot, webflux
- Language: Java
- Homepage:
- Size: 30.3 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# perf_tests_2025
[](https://spring.io/projects/spring-boot)
[](https://spring.io/projects/spring-boot)
[](https://maven.apache.org/download.cgi)
[](https://nodejs.org/en/)
[](https://fastapi.tiangolo.com/)
[](https://go.dev/)
[](https://www.docker.com/)
## Testing
```bash
docker compose up
```
1. Using [Test Client](https://github.com/Thoughtscript/test_client)
2. [Postman](https://www.postman.com/)
3. Using [JMeter](https://jmeter.apache.org/)
## Test Client Findings
These have been [tested](https://github.com/Thoughtscript/test_client) up to `100,000` near-concurrent requests/connections partly to:
1. See what kind of load they can handle.
2. And to isolate the impact of other dependencies that might cause inefficient Virtual Threading elsewhere.
Configuration:
```yaml
client:
logging:
full: true
stats: true
concurrent:
workers: 100000
cycles: 2
pause: 1000
```
> Verifies that there are no errors: no `5XX`, no `4XX` - retrieves and logs Response Body.
| Detail | Spring Boot 22 | Spring WebFlux | Node.js | FastAPI | Go | Spring Boot 25 |
| --- | --- | --- | --- | --- | --- | --- |
| Near Concurrent Connections | `100,000` in `2` cycles | `100,000` in `2` cycles | `100,000` in `2` cycles | `100,000` in `2` cycles | `100,000` in `2` cycles | `100,000` in `2` cycles |
| Total Duration | `137347ms` | `137114ms` | `131182ms` | `145531ms` | `113625ms` | `146942ms` |
| Average Client Request Duration | `0ms` | `0ms` | `0ms` | `0ms` | `0ms` | `0ms` |
| Docker Desktop Memory Utilization | `378.9MB` | `412.1MB` | `224.4MB` | `273.1MB` | `135.5MB ` | `473.3MB` |
| Docker Desktop Peak CPU Utilization | `291.54%` | `63%` | `25.83%` | `28.6%`| `20%` | `31.13%` |
| Docker Desktop CPU Utilization | `29.41%` | `26.25%` | `27.43%` | `27.14%` | `19.84%` | `28.9%` |
| Docker | `maven:3.9.6-eclipse-temurin-22-alpine` | `maven:3.9.6-eclipse-temurin-22-alpine` | `node:23.11.1` | `python:3.12.3` | `golang:1.24.0` | `maven:3.9.6-eclipse-temurin-22-alpine` |
| Config of Note | Virtual Threads (`100`) | Webflux/Reactor Threads (`5-10`) | HTTPS Fork Cluster (`8`), SSL | Uvicorn Workers (`8`) | Go Routines/Channels, SSL | Virtual Threads (`100`)
| Version | Java `22`, Spring Boot `3.5.0` | Java `22`, Spring Boot `3.5.0` | Node `23.11.1` | Python `3.12.3`, fastapi `0.115.12` | Go `1.24.0` | Java `25`, Spring Boot `4.0.0M3` |
| Endpoints | http://localhost:8888/api/example/all | http://localhost:7777/api/example/all | https://localhost:8787/api/example/all | http://localhost:6767/api/example/all | https://localhost:9999/api/example/all | http://localhost:8989/api/example/all |
> Tested on Machine: `AMD Ryzen 5 5600X (6/12 Core), 32 GB RAM, Windows 11 Pro`
## JMeter Findings
> Available [here](./_jmeter/).
## Resources and Links
1. Node [1M Users](https://noncodersuccess.medium.com/how-id-scale-a-website-to-1-million-users-with-node-js-examples-53fb58c22302)
2. Node [500K Users - 1K Concurrent](https://medium.com/unboxd/how-i-built-an-app-with-500-000-users-in-5-days-on-a-100-server-77deeb238e83)
3. Node [10K Concurrent](https://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1)
4. Node [100K Users - 50K Concurrent](https://blog.devgenius.io/how-a-failed-startup-led-me-to-master-node-js-design-patterns-c9dd88e46afe)
5. WebFlux [10K Concurrent](https://aabir-hassan.medium.com/demystifying-spring-webflux-the-event-loop-threading-models-and-schedulers-part-1-7d2711d2f60e)
6. Node, Boot, and WebFlux [10K, 1K, and 10K Concurrent](https://www.brilworks.com/blog/node-js-vs-spring-boot/), respectively
7. Boot [15K Concurrent](https://haril.dev/en/blog/2023/11/10/Spring-MVC-Traffic-Testing)