This is a test application based on roda-sequel-stack, using Roda as the web framework, Sequel as the database library and Rodauth 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 4.15.0-210-generic #221-Ubuntu SMP Tue Apr 18 08:32:52 UTC 2023 x86_64 GNU/Linux
CPU: AuthenticAMD AMD Ryzen 7 2700X Eight-Core Processor
Ruby | JIT | Mem start | Mem end | Runtime | Mean | Median | Std.Dev | Slow | Errors | N | GC runs |
---|---|---|---|---|---|---|---|---|---|---|---|
ruby-2.7.6 | 36Mb | 44Mb | 50s | 0.97ms | 0.92ms | 0.29ms | 6 | 0 | 150000 | 10 | |
ruby-3.0.4 | 34Mb | 40Mb | 50s | 0.96ms | 0.92ms | 0.39ms | 170 | 0 | 150000 | 22 | |
ruby-3.0.4 | MJIT | 34Mb | 47Mb | 50s | 0.94ms | 0.89ms | 0.4ms | 171 | 0 | 150000 | 22 |
ruby-3.1.3 | 36Mb | 42Mb | 49s | 0.98ms | 0.94ms | 0.44ms | 242 | 0 | 150000 | 30 | |
ruby-3.1.3 | MJIT | 36Mb | 49Mb | 53s | 1.03ms | 0.97ms | 0.45ms | 248 | 0 | 150000 | 30 |
ruby-3.1.3 | YJIT | 46Mb | 56Mb | 49s | 0.94ms | 0.88ms | 0.54ms | 468 | 0 | 150000 | 52 |
ruby-3.2.2 | 35Mb | 50Mb | 48s | 0.93ms | 0.87ms | 0.31ms | 7 | 0 | 150000 | 1 | |
ruby-3.2.2 | MJIT | 36Mb | 74Mb | 49s | 0.93ms | 0.88ms | 3.97ms | 33 | 0 | 150000 | 3 |
ruby-3.2.2 | YJIT | 36Mb | 56Mb | 43s | 0.85ms | 0.8ms | 0.44ms | 11 | 0 | 150000 | 1 |
ruby-3.3.0-preview1 | 37Mb | 47Mb | 47s | 0.9ms | 0.85ms | 0.31ms | 12 | 0 | 150000 | 2 | |
ruby-3.3.0-preview1 | RJIT | 89Mb | 253Mb | 55s | 0.93ms | 0.79ms | 12.09ms | 1547 | 0 | 150000 | 2 |
ruby-3.3.0-preview1 | YJIT | 39Mb | 54Mb | 43s | 0.82ms | 0.78ms | 0.52ms | 24 | 0 | 150000 | 2 |
- Ruby with lowest slow response-count (> 5ms): ruby-2.7.6 (6x)
- Ruby with lowest median* response-time: ruby-3.3.0-preview1 YJIT (0.78ms)
- Ruby with lowest standard deviation response-time: ruby-2.7.6 (0.29ms)
- Ruby with lowest mean* response-time: ruby-3.3.0-preview1 YJIT (0.82ms)
- Ruby with lowest memory use: ruby-3.0.4 (40Mb)
* 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
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).
Same as above but focussing on the most ocurring response times. GC runs are not shown.