Skip to content

node --report-on-process-timeout writes truncated report when a Worker is blocked #66303

Description

@trivikr

Version

main

Platform

All

Subsystem

report

What steps will reproduce the bug?

import { Worker } from 'node:worker_threads';

new Worker(`require('node:child_process').execFileSync('sleep', ['30']);`, { eval: true });

Run with

$ node --process-timeout=1s --report-on-process-timeout repro.js

How often does it reproduce? Is there a required condition?

Always

What is the expected behavior? Why is that the expected behavior?

A complete, valid JSON report is written. Blocked Workers could be left out or marked as unresponsive. A stuck Worker is exactly the case where you'd want the report. The forced-exit message should also start on its own line.

What do you see instead?

(node:2291000) Process timed out after 1s (--process-timeout). Exiting with code 124.
Main thread was not executing JavaScript.
Resources keeping the event loop alive:
    Worker (thread 1, name 'WorkerThread')

Writing Node.js report to file: report.20260925.212601.2291000.0.001.json(node:2291000) The process did not finish exiting within 5000ms after --process-timeout expired. Forcing exit.
$ node -e "JSON.parse(require('fs').readFileSync('report.20260925.212601.2291000.0.001.json'))"
SyntaxError: Expected property name or '}' in JSON at position 8192 (line 338 column 9)

Additional information

No response

Activity

  1. self-assigned this
    on Sep 25, 2026
  2. added
    reportIssues and PRs related to Node.js diagnostic reports.
    on Sep 25, 2026
  3. changed the title [-]--report-on-process-timeout writes truncated report when a Worker is blocked[/-] [+]node --report-on-process-timeout writes truncated report when a Worker is blocked[/+] on Sep 25, 2026
  4. jasnell commented on Sep 25, 2026

    @jasnell
    Member

    @trivikr ... i'm going to assume since you assigned this to yourself you're going to take a stab at fixing... I did a quick check and this is what I found:

    The bug is in node_report.cc, not the watchdog. The report waits with no time limit for every Worker to respond to its interrupt. A Worker blocked in a native synchronous call never responds. Any main-thread report hangs forever in this case; --process-timeout just turns the hang into a truncated file. Specifically, node_report.cc hands and the process timeout grace period cuts it off.

  5. trivikr commented on Sep 25, 2026

    @trivikr
    MemberAuthor

    Yes. A proposed a 2-second time limit for worker threads in #66304

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

reportIssues and PRs related to Node.js diagnostic reports.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions