Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions benchmarks/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Kemal Benchmark

## Installation

You will need to install [wrk](https://github.com/wg/wrk/blob/master/INSTALL) in order to run the benchmarks.

## Running

To run the benchmarks, run `run`.

The output will look something like this:

```
Building app...
Starting app...
2025-08-13T13:50:39.080477Z INFO - kemal: [development] Kemal is ready to lead at http://0.0.0.0:3000
Running benchmark...
Running 5s test @ http://0.0.0.0:3000
8 threads and 50 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.09ms 181.77us 4.30ms 82.42%
Req/Sec 5.52k 532.67 7.04k 70.02%
223578 requests in 5.10s, 33.48MB read
Requests/sec: 43842.96
Transfer/sec: 6.56MB
2025-08-13T13:50:46.183382Z INFO - kemal: Kemal is going to take a rest
```

### Tip: Save the results to a file

You can use `run > results.log` to save the results to a file `results.log`.
19 changes: 19 additions & 0 deletions benchmarks/run
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash


shards install
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this could just symlink benchmarks/lib/kemal to ./, so no need to have a project inside the project.

If not, the benchmarks/lib must be added to .gitignore.


echo "Building app..."

crystal build --release -o app src/app.cr

echo "Starting app..."

./app &
APP_PID=$!
sleep 2

echo "Running benchmark..."

wrk -t8 -c50 -d5s http://0.0.0.0:3000
kill $APP_PID
14 changes: 14 additions & 0 deletions benchmarks/shard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: kemal-benchmark
version: 0.1.0

authors:
- Serdar Dogruyol <[email protected]>

dependencies:
kemal:
github: kemalcr/kemal
branch: master

crystal: ">= 0.36.0"

license: MIT
9 changes: 9 additions & 0 deletions benchmarks/src/app.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
require "kemal"

logging false

get "/" do
"Hello World"
end

Kemal.run
Loading