Skip to content

Latest commit

 

History

History
59 lines (45 loc) · 3.24 KB

benchmarks.md

File metadata and controls

59 lines (45 loc) · 3.24 KB

Benchmarks

These numbers come from cmd/tracelet-bench replaying requests recorded from the official SDKs (testdata/) against one Tracelet process. They measure ingest: the time for Tracelet to validate a request, write it durably to the write-ahead log and answer the SDK. "Drained" is how long the processor took, after the last request, to finish writing everything into ClickHouse and Postgres.

Results (2026-11-03)

Suite Requests in 30 s Requests per second p50 p95 p99 Accepted Drained
Sentry envelopes 215,913 7,197 8.5 ms 13.0 ms 17.8 ms 100% 311 ms
PostHog capture 139,547 4,651 10.3 ms 27.7 ms 58.6 ms 100% 107 ms
OTLP traces and logs 134,176 4,472 11.4 ms 23.5 ms 35.7 ms 100% 107 ms
All mixed 126,466 4,215 11.0 ms 32.4 ms 76.4 ms 100% 209 ms

Each request carries one or more events, so events per second are higher than requests per second.

After cron check-ins, surveys and experiment exposures joined the recorded fixtures (2026-11-03, same machine), the mixed suite ran 121,916 requests in 30 s (4,063 per second; p50 12.0 ms, p95 29.4 ms, p99 59.4 ms; 100% accepted) and the processor drained in 518 ms. That is 3.6% below the mixed row above. A like-for-like run with exactly the baseline fixtures (9 Sentry, 13 PostHog, 7 OTLP) ran 151,085 requests (5,036 per second; p50 10.2 ms, p95 21.7 ms, p99 54.9 ms; 100% accepted; drained in 305 ms), 19% above the baseline, so the gap comes from the heavier fixtures.

Resource usage (2026-11-03)

Measured on the same machine while tracelet-bench -suite all -concurrency 64 -duration 30s ran, sampling every 3 seconds. Postgres and ClickHouse use their default Docker settings; nothing was tuned. Sampling competes for the same CPUs, so this run's throughput (1,171 requests per second) is lower than the table above; read it for memory, not speed.

  • Tracelet: 41 MB resident when idle, 78 MB at peak under load (105 MB private bytes). It used 11.9 CPU seconds over the 33-second run, about a third of one core.
  • Postgres 17: 113 MiB idle, 129 MiB after the run.
  • ClickHouse 25.8: about 1.3 GiB throughout, peaking at 1.49 GiB. Most of this is ClickHouse's default caches, not data.
  • Whole stack: under 1.8 GB of memory and three containers.
  • Binary: 49 MB (tracelet.exe, Windows amd64, with the dashboard embedded).

Environment

  • One desktop machine: 12 logical CPUs, Windows 11, the load generator on the same machine.
  • Postgres 17 and ClickHouse 25.8 in Docker Desktop (WSL 2), default settings.
  • 64 concurrent senders, 30 seconds per suite, default Tracelet settings.

This is a development machine, not a server. Docker on Windows adds file system and network overhead, and the load generator competes with Tracelet for the same CPUs. Treat these numbers as a floor and a regression baseline, not as a capacity rating.

Reproduce

go build -o tracelet-bench ./cmd/tracelet-bench
tracelet-bench -url http://localhost:3420 -key <public key> -project <id> -suite all -concurrency 64 -duration 30s

Run it against a separate project or instance: it sends real fixture events, so they show up in that project's issues and analytics.