# wrk — Modernes Multi-Threaded-HTTP-Benchmarking mit Lua

> Praxis-Guide zu wrk — Multi-Threaded-HTTP-Benchmarking mit Lua. Lastprofile konfigurieren, Latenz-Perzentile messen und POST-Requests automatisieren.

Source: https://www.jpkc.com/db/cheatsheets/networking/wrk/

<!-- PROSE:intro -->
wrk ist ein modernes, multi-threaded HTTP-Benchmarking-Tool, das mit minimalem Ressourceneinsatz hohe Last auf Webserver bringen kann. Dank eines ereignisgesteuerten Modells (epoll/kqueue) erzielt es mit wenigen Threads und Verbindungen deutlich höheren Durchsatz als klassische Tools. Per Lua-Skript passt du Requests, Header und Logik flexibel an – von einfachen GET-Tests bis zu komplexen Szenarien mit dynamischem Body. Ideal, wenn du schnell wissen willst, ob ein Endpoint unter Last standhält.
<!-- PROSE:intro:end -->

## Grundlegende Verwendung

`wrk -t <threads> -c <connections> -d <duration> <url>` — Startet einen Benchmark mit Anzahl Threads, Verbindungen und Laufzeit.

```bash
wrk -t4 -c100 -d30s http://localhost:8080/
```

`wrk <url>` — Schneller Benchmark mit Standardwerten (2 Threads, 10 Verbindungen, 10 s).

```bash
wrk http://localhost:8080/
```

`wrk -t <threads> -c <connections> -d <duration> --latency <url>` — Zeigt detaillierte Latenzen in Perzentilen.

```bash
wrk -t4 -c100 -d30s --latency http://localhost:8080/
```

`wrk -t1 -c1 -d5s <url>` — Einzelner Thread und Verbindung – misst die Basis-Latenz.

```bash
wrk -t1 -c1 -d5s http://localhost:8080/api
```

## Verbindungen und Dauer

`wrk -c <connections> <url>` — Legt die Anzahl gleichzeitiger Verbindungen fest.

```bash
wrk -c 200 -d 10s http://localhost:8080/
```

`wrk -d <duration> <url>` — Setzt die Testdauer (s = Sekunden, m = Minuten).

```bash
wrk -d 1m http://localhost:8080/
```

`wrk -t <threads> <url>` — Legt die Thread-Anzahl fest (empfohlen: Anzahl CPU-Kerne).

```bash
wrk -t $(nproc) -c 400 -d 30s http://localhost:8080/
```

`wrk --timeout <duration> <url>` — Setzt den Timeout für einzelne Requests.

```bash
wrk --timeout 5s -c 100 -d 30s http://localhost:8080/
```

## Header und eigene Anfragen

`wrk -H '<header>' <url>` — Fügt einen eigenen HTTP-Header hinzu.

```bash
wrk -H 'Authorization: Bearer token123' -c 50 -d 10s http://localhost:8080/api
```

`wrk -H 'Content-Type: application/json' <url>` — Setzt den Content-Type-Header.

```bash
wrk -H 'Content-Type: application/json' -c 50 -d 10s http://localhost:8080/api
```

`wrk -H '<h1>' -H '<h2>' <url>` — Fügt mehrere eigene Header hinzu.

```bash
wrk -H 'Accept: application/json' -H 'X-API-Key: abc123' -c 50 -d 10s http://localhost/api
```

## Lua-Skripte

`wrk -s <script> <url>` — Verwendet ein Lua-Skript für angepasste Requests.

```bash
wrk -s post.lua -t4 -c100 -d30s http://localhost:8080/api
```

`wrk -s <script> -- <arg1> <arg2>` — Übergibt Argumente an ein Lua-Skript.

```bash
wrk -s bench.lua -t4 -c100 -d30s http://localhost/ -- arg1 arg2
```

## Häufige Muster

`wrk -t4 -c10 -d10s --latency <url>` — Leichter Lasttest mit Latenz-Verteilung.

```bash
wrk -t4 -c10 -d10s --latency http://localhost:8080/
```

`wrk -t8 -c500 -d60s --latency <url>` — Schwerer Stresstest mit hoher Verbindungszahl.

```bash
wrk -t8 -c500 -d60s --latency http://localhost:8080/
```

`for c in 10 50 100 500; do echo "--- $c connections ---"; wrk -t4 -c$c -d10s <url>; done` — Stufenweiser Lasttest mit steigender Parallelität.

```bash
for c in 10 50 100 500; do echo "--- $c connections ---"; wrk -t4 -c$c -d10s http://localhost:8080/; done
```

<!-- PROSE:outro -->
## Fazit

wrk ist dein direktes Messwerkzeug, wenn du wissen willst, wie viele Requests pro Sekunde ein Endpoint wirklich verarbeitet. Für einfache Throughput-Tests reicht ein einzelner Befehl; für realistische Szenarien – POST-Requests, Token-Auth, variable Payloads – greifst du zu Lua. Die Metriken Latenz-Perzentile und Fehlerrate sagen mehr als jede reine Requests-pro-Sekunde-Zahl.

## Weiterführende Links

- [wrk – GitHub-Repository](https://github.com/wg/wrk) – Quellcode, README und Lua-Scripting-API (englisch)
- [wrk Scripting-Dokumentation](https://github.com/wg/wrk/blob/master/SCRIPTING) – Lua-Hooks für Request-Generierung und Ergebnis-Auswertung (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [ab](https://www.jpkc.com/db/cheatsheets/networking/ab/) – klassischer Apache-Benchmarker für einfache Lastprofile
- [siege](https://www.jpkc.com/db/cheatsheets/networking/siege/) – Lasttest mit URL-Listen und HTTP-Authentifizierung
- [h2load](https://www.jpkc.com/db/cheatsheets/networking/h2load/) – HTTP/2- und HTTP/3-Benchmarking mit nghttp2

