nodejs / nodejs/node

Increased CPU utilization after upgrading from Node.js v20.20.0 to v22.x

オープン
#62,939 コメント 8 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

stale
主要言語
JavaScript
スター
122k
フォーク
37.3k
平均マージ
4日 2時間
マージ済み PR(30日)
283

説明

Version

v22.22.0 / v22.22.2 / 24.15.0

Platform
Oracle Linux 8 latest
Subsystem

No response

What steps will reproduce the bug?
  1. Run workload on Node.js v20.20.0 → CPU ~68–70%
  2. Upgrade to Node.js v22.22.x or 24.15.0
  3. Run identical workload (same TPS, config)
  4. Observe CPU increase (~86–88%)
  5. Revert to v20 → CPU returns to baseline
How often does it reproduce? Is there a required condition?

consistently 100% reproducable

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

no bigger than 5% CPU degradation

What do you see instead?

20% CPU degradation

Additional information

We are observing a significant increase in CPU utilization after upgrading our runtime from Node.js v20.20.0 → v22.x (22.22.x), with no application-level changes.

A/B testing strongly indicates the regression is tied to the Node.js runtime upgrade rather than application logic.

Impact

  • ~20% relative CPU increase observed
  • Consistent across multiple test runs
  • No functional regression, but clear performance degradation

Environment

  • Node.js versions:
    • v20.20.0 (baseline)
    • v22.22.0 / v22.22.2
  • Workload:
    • High-throughput service (~17–18K TPS)
    • Distributed/multi-node setup
  • Runtime flags:
    • --max-semi-space-size=256
    • --max-old-space-size=3072

Observed Behavior

Scenario Node Version CPU Utilization
Baseline v20.20.0 ~68–70%
Upgraded runtime v22.22.x ~86–88%
v22.x + --max-semi-space-size=16 v22.22.x ~88%
Reverted runtime v20.20.0 ~68%

Key Findings

  1. Strong correlation with Node.js version

    • Reverting v22 → v20 reduces CPU by ~12–20%
    • No application changes between runs
  2. Memory tuning did not help

    • Adjusting --max-semi-space-size showed no improvement
    • Lower values increased GC frequency without reducing CPU
  3. Latest v22 versions do not fix the issue

    • Testing with v22.22.2 shows same behavior
  4. Maglev likely not the cause

    • Disabled by default in Node ≥22.9.0
    • Issue persists on versions where Maglev is disabled

What Was Ruled Out

  • Application-level regression
  • Load/TPS variation
  • GC tuning via semi-space adjustments
  • Early v22-only issues

Suspected Cause

Likely related to runtime-level changes introduced in Node.js v22, such as:

  • V8 upgrade (v11.x → v12.x)
  • JIT execution changes
  • GC or memory management differences
  • libuv / stream internal changes

Reproduction Steps (High-level)

  1. Run workload on Node.js v20.20.0 → CPU ~68–70%
  2. Upgrade to Node.js v22.22.x
  3. Run identical workload (same TPS, config)
  4. Observe CPU increase (~86–88%)
  5. Revert to v20 → CPU returns to baseline

Additional Notes

  • No explicit Node.js release notes mention this regression
  • Issue is reproducible under high throughput
  • Not observed in lower TPS environments (≤5–7K TPS)

##Questions##

  • Are there known CPU regressions or behavior changes in Node.js v22 / V8 12.x?
  • Are there recommended runtime flags or GC tuning options for high-throughput workloads in v22?
  • Any guidance on mitigating CPU increase when upgrading from v20 → v22?
  • Will an upgrade to the latest available version of Node.js v26 fix this issue?

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、記載されているメモリフラグを使用し、TPS と構成を同一に保ったまま、Oracle Linux 8 上の Node.js v20.20.0 と v22.22.x で報告された高スループットワークロードを再現します。CPU 使用率を比較し、最小限で再現可能なワークロードを文書化するか、原因となっているランタイムの変更を切り分けます。issue ではソースファイルやテストは指定されていません。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript, linux, node.js
領域
backend, performance
issue の種類
バグ
難易度
5/5
見積もり時間
1週間以上
活発さ
活発
明瞭さ
説明が足りない
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。