getsentry / sentry-javascript

Official Sentry SDKs for JavaScript
https://sentry.io
MIT License
7.9k stars 1.56k forks source link

A drop in simultaneous requests per seconds with Bun when Sentry is active #12561

Open riepspellz opened 3 months ago

riepspellz commented 3 months ago

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/browser

SDK Version

8.10.0

Framework Version

Bun 1.1.14

Link to Sentry event

No response

SDK Setup

import { init } from "@sentry/bun";

init({
    dsn: process.env.SENTRY_DSN
});

Steps to Reproduce

  1. Compile your app and launch a stress test (bombardier 100 concurrent, 1 million requests) on a simple route [https://github.com/codesenberg/bombardier](Bombardier link) Command: bombardier -c 100 -n 1000000 http://localhost:8080/stress
  2. Put your dsn in the Sentry.init as undefined
  3. Recompile your app and relaunch the same stress test

FYI: I just convert my Typescript Express APP CJS into a fully ESM Express app, builded with esbuild and powered by Bun. After that, i wanted to check the effective gain of this conversion with some stress test.

In my CJS Node app, there's a small difference with or without Sentry: Average of 18190.75 requests seconds with Sentry Average of 19211.16 requests seconds without

Screenshot 2024-06-19 at 15 40 12

In node i was using the 8.8.0 version of @sentry/node.

Expected Result

Approximatively the same requests/seconds

Actual Result

~54 % less requests/seconds

Screenshot 2024-06-19 at 15 35 40
AbhiPrasad commented 3 months ago

@riepspellz if you add skipOpenTelemetrySetup: true to your Sentry.init call do you see similar performance problems?

If you use @sentry/node instead of @sentry/bun (top-level API should be identical), do you see similar performance issues?

riepspellz commented 3 months ago

@riepspellz if you add skipOpenTelemetrySetup: true to your Sentry.init call do you see similar performance problems?

If you use @sentry/node instead of @sentry/bun (top-level API should be identical), do you see similar performance issues?

Hello @AbhiPrasad ,

It seems to work !

Passing to @sentry/node makes me go to 47426.66 requests per seconds instead of 31048 requests per seconds. Same result with or without skipOpenTelemetrySetup: true

In the other hand, if keep @sentry/bun and i put skipOpenTelemetrySetup: true, the init function doesn't recognise it (TS interface not implemented yet ?), but it improve the results, from 31048 requests per seconds to 38775.97 requests per seconds.

For now, i will use @sentry/node, thanks for the tip !

AbhiPrasad commented 3 months ago

okay so this is something with our Bun instrumentation then!

I'm going to backlog this, but any kind of profile of a request with the Bun SDK active would be a big help in us understanding the performance differences!