Repository navigation
perf_hooks.performance.timerify() with histogram: RangeError [ERR_OUT_OF_RANGE] on arm64 #41641
Description
Activity
cc @jasnell
- addedperf_hooksIssues and PRs related to the perf_hooks module and performance measurement APIs.Issues and PRs related to the perf_hooks module and performance measurement APIs.
on Jan 22, 2022 I recently upgraded to an arm64 laptop and was able to update the description of this issue with more specific system details. I also fixed a bug in the provided snippet which caused the reported bug to never trigger.
Additionally, I was able to reproduce this bug on Node.js v18.1.0.
We're still seeing this with node 18.18
https://github.com/nodejs/node/blob/v18.x/lib/internal/perf/timerify.js#L38-L40
is there any guarantee that two calls to performance.now() will return a different value?
github-actions commented
on Jun 25, 2026 on Jun 25, 2026 – with GitHub ActionsContributorMore actionsThis issue has been marked as stale due to 210 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.- addedstaleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.Issues and PRs marked stale due to inactivity and scheduled for automatic closure.
on Jun 25, 2026 Still occurring for me on Node v26:
Crashed on iteration 562 node:internal/histogram:292 validateInteger(val, 'val', 1); ^ RangeError [ERR_OUT_OF_RANGE]: The value of "val" is out of range. It must be >= 1 && <= 9007199254740991. Received 0 at RecordableHistogram.record (node:internal/histogram:292:5) at processComplete (node:internal/perf/timerify:40:15) at timerified fn (node:internal/perf/timerify:87:5) at file:///Users/jonah.snider/programming/node-bug-41641/index.mjs:9:3 at ModuleJob.run (node:internal/modules/esm/module_job:439:25) at async node:internal/modules/esm/loader:646:26 at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:101:5) { code: 'ERR_OUT_OF_RANGE' } Node.js v26.3.0- removedstaleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.Issues and PRs marked stale due to inactivity and scheduled for automatic closure.
on Jun 26, 2026 github-actions commented
on Sep 25, 2026 on Sep 25, 2026 – with GitHub ActionsContributorMore actionsThis issue has been marked as stale due to 90 days of inactivity.
It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.- addedstaleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.Issues and PRs marked stale due to inactivity and scheduled for automatic closure.
on Sep 25, 2026 Still able to reproduce on v26.10.0:
Crashed on iteration 2130 node:internal/histogram:734 validateInteger(val, 'val', 1); ^ RangeError [ERR_OUT_OF_RANGE]: The value of "val" is out of range. It must be >= 1 && <= 9007199254740991. Received 0 at RecordableHistogram.record (node:internal/histogram:734:5) at processComplete (node:internal/perf/timerify:40:15) at timerified fn (node:internal/perf/timerify:87:5) at file:///Users/jonah.snider/Downloads/test.js:9:3 at ModuleJob.run (node:internal/modules/esm/module_job:569:25) at async node:internal/modules/esm/loader:650:26 at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:105:5) { code: 'ERR_OUT_OF_RANGE' } Node.js v26.10.0- added 2 commits that reference this issue
on Sep 25, 2026 - added a commit that references this issue
on Sep 27, 2026 - added 2 commits that reference this issue
on Sep 28, 2026
Version
v14, v16, v17, v18, v26
Platform
macOS v12.4 (21F79).
Darwin 21.5.0 Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:37 PDT 2022; root:xnu-8020.121.3~4/RELEASE_ARM64_T6000 arm64
Subsystem
perf_hooks
What steps will reproduce the bug?
Run this snippet:
How often does it reproduce? Is there a required condition?
100% consistent reproduction, requires arm64, maybe requires macOS.
What is the expected behavior?
Calling the timerified function returned from
perf_hooks.performance.timerify()should successfully record to the histogram.What do you see instead?
Additional information
Originally reported here: sindresorhus/yoctocolors#9 (comment)
The bug appears to be from the implementation of
perf_hooks.performance.timerify()with a histogram, when calling the returned timerified function. The error comes from the input validation ofRecordableHistogram#record(), attempting to record a valuex < 1will throw. For whatever reasontimerify()seems to be recording an execution duration of 0 and trying to record that. See the error stacktrace for more info.