Node: process never exits since 10.72 — beforeExit session send + client-report flush feed each other (skipOpenTelemetrySetup: true)
@logaretm がすでに取り組んでいます。
2026年9月10日 から。
評価
この issue はまだ評価されていません。
説明
Is there an existing issue for this?
- I have checked for existing issues https://github.com/getsentry/sentry-javascript/issues
- I have reviewed the documentation https://docs.sentry.io/
- I am using the latest SDK release https://github.com/getsentry/sentry-javascript/releases
How do you use Sentry?
Sentry Saas (sentry.io)
Which SDK are you using?
@sentry/node
SDK Version
10.73.0 (also 10.72.0; 10.54.0 is fine)
Framework Version
Node 22.22.2
Link to Sentry event
No response
Reproduction Example/SDK Setup
// repro.mjs — run with a DSN pointing at any HTTP server that answers 200, e.g. a stub on localhost
import * as Sentry from "@sentry/node"
Sentry.init({
dsn: process.env.SENTRY_DSN,
release: "1.0.0", // any release, so the process session is sendable
skipOpenTelemetrySetup: true, // we run our own OTel pipeline elsewhere
tracesSampleRate: undefined, // tracing off
})
console.log("done; letting the process exit naturally")
Stub receiver used for the counts below:
import http from "node:http"
let n = 0
http.createServer((req, res) => { let b = ""; req.on("data", c => b += c); req.on("end", () => {
n++; console.log(n, req.url, [...b.matchAll(/"type":"([a-z_]+)"/g)].map(m => m[1]).join(","), b.slice(-160)); res.end("{}") }) }).listen(9999)
Steps to Reproduce
node stub.mjsSENTRY_DSN=http://k@localhost:9999/1 node repro.mjs
Expected Result
The process sends the session (and at most one client report) and exits.
Actual Result
The process never exits. The stub receives one session envelope and then an endless stream of client_report envelopes, each containing:
{"discarded_events":[{"reason":"no_parent_span","category":"span","quantity":1}]}
CPU sits at 60–100% against a local stub; against a real DSN the loop is network-bound but the process is still immortal. We hit this in a Cloud Run job running database migrations, which hung until its 600 s task timeout on every deploy after upgrading from 10.54.
What appears to happen:
- #23731 (10.72) makes
processSessionIntegrationend the session onbeforeExitwhen its status isok, so a healthy process now sends asessionenvelope at exit (previously the condition was inverted and healthy processes sent nothing). - That transport request is instrumented by the http integration. With no OTel setup and tracing off, its span is dropped and
recordDroppedEvent("no_parent_span", "span")records an outcome. - The client-report
beforeExitlistener flushes the new outcome → another instrumented request → anotherno_parent_spanoutcome →beforeExitagain → …
Confirmed by elimination:
| init options | result |
|---|---|
{ dsn, release } |
1 session, exits |
{ dsn, release, skipOpenTelemetrySetup: true } |
1 session + infinite client reports, never exits |
{ dsn, release, skipOpenTelemetrySetup: true, sendClientReports: false } |
1 session, exits |
| same as row 2 on 10.54.0 | nothing sent, exits |
await Sentry.close() before exiting also avoids it, but the default behaviour of a process that simply finishes should not be to hang.
Additional Context
Suggested fixes: don't record a no_parent_span outcome for the SDK's own transport requests, and/or don't re-arm the client-report flush from within a beforeExit flush (e.g. only flush outcomes that existed before the current beforeExit tick).
Priority
Medium
- 主要言語
- TypeScript
- スター
- 8.7k
- フォーク
- 1.9k
- 平均マージ
- 1日 18時間
- マージ済み PR(30日)
- 562
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
getsentry/sentry-javascript のほかの issue
-
Browser Waiting for: Product Owner
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
getsentry/sentry-javascript#24577 · コメント 1 件 ·
-
Task
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
getsentry/sentry-javascript#24558 · コメント 1 件 ·
-
Task
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
getsentry/sentry-javascript#24557 · コメント 1 件 ·
-
Task
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
getsentry/sentry-javascript#24556 · コメント 1 件 ·
-
Task
難易度 1/5 1〜3時間 初心者へのやさしさ 90/100
getsentry/sentry-javascript#24555 · コメント 1 件 ·
getsentry/sentry-javascript の issue をすべて見る
似ている issue
-
blocklist removal
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
MetaMask/eth-phishing-detect#296544 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
pastelsky/bundlephobia#1122 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
category/development priority/P2 scope/file-operations scope/testing type/enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
Enatega Customer and Rider app: Add-ons price is not visible to customer after order is placed. オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100