This is a test application based on Ruby-on-Rails, using Devise for authentication.
Performance of this application was tested by continuously sending requests to the server. Five url's were included in the test:
- index-page without cookie (black)
- create-account-page (red)
- reset-password-request-page (green)
- index-page with good cookie (blue)
- index-page with bad cookie (cyan)
OS: Linux 6.8.0-90-generic #91-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 18 14:14:30 UTC 2025 x86_64 GNU/Linux
CPU: AuthenticAMD AMD Ryzen 7 5800X 8-Core Processor
| Ruby | JIT | Mem start | Mem end | Runtime | Mean | Median | Std.Dev | Slow | Errors | N | GC runs |
|---|---|---|---|---|---|---|---|---|---|---|---|
| ruby-3.0.4 | 67Mb | 90Mb | 561s | 2.23ms | 2.28ms | 0.6ms | 867 | 0 | 750000 | 104 | |
| ruby-3.1.3 | 67Mb | 86Mb | 535s | 2.13ms | 2.2ms | 0.52ms | 524 | 0 | 750000 | 68 | |
| ruby-3.1.3 | YJIT | 79Mb | 112Mb | 467s | 1.85ms | 1.89ms | 0.55ms | 669 | 0 | 750000 | 77 |
| ruby-3.2.2 | 75Mb | 101Mb | 524s | 2.09ms | 2.15ms | 0.44ms | 204 | 0 | 750000 | 22 | |
| ruby-3.2.2 | YJIT | 83Mb | 131Mb | 425s | 1.69ms | 1.7ms | 0.47ms | 267 | 0 | 750000 | 23 |
| ruby-3.3.1 | 73Mb | 91Mb | 520s | 2.08ms | 2.15ms | 0.37ms | 82 | 0 | 750000 | 0 | |
| ruby-3.3.1 | YJIT | 78Mb | 116Mb | 378s | 1.5ms | 1.51ms | 0.36ms | 128 | 0 | 750000 | 1 |
| ruby-3.4.1 | 68Mb | 92Mb | 544s | 2.16ms | 2.19ms | 0.4ms | 111 | 0 | 750000 | 8 | |
| ruby-3.4.1 | YJIT | 75Mb | 115Mb | 394s | 1.57ms | 1.53ms | 0.44ms | 154 | 0 | 750000 | 1 |
| ruby-4.0.0 | 140Mb | 200Mb | 542s | 2.15ms | 2.17ms | 0.39ms | 304 | 0 | 750000 | 35 | |
| ruby-4.0.0 | YJIT | 160Mb | 235Mb | 386s | 1.54ms | 1.53ms | 0.46ms | 202 | 0 | 750000 | 0 |
- Ruby with lowest slow response-count (> 7ms): ruby-3.3.1 (82x)
- Ruby with lowest median* response-time: ruby-3.3.1 YJIT (1.51ms)
- Ruby with lowest standard deviation response-time: ruby-3.3.1 YJIT (0.36ms)
- Ruby with lowest mean* response-time: ruby-3.3.1 YJIT (1.5ms)
- Ruby with lowest memory use: ruby-3.1.3 (86Mb)
* Mean and median are calculated after warmup (x > N/2).
Boxplot showing ~99% of all measurements (sorted by responsetime)

Showing a single tested uri and the most occurring response-times after warmup (x > N/2)

Logged after a fixed interval of measurements (1,000). Each run is shown in a different color

These scatter-plots show the response time of individual calls as dots. Note that many dots may overlap each other.
Vertical blue lines near the X-axis indicate major garbage collection runs (of Run-ID 1, but only when there are less than 100 GC runs).
Same as above but focussing on the most ocurring response times. GC runs are not shown.





















