From 2ea4b2aef9287d0be3afcccda40ce071c31efa9e Mon Sep 17 00:00:00 2001 From: eugene1g Date: Fri, 26 Apr 2024 13:06:52 -0600 Subject: [PATCH] http2: fix excessive CPU usage when using `allowHTTP1=true` When Http2SecureServer is configured with `allowHTTP1=true`, it calls `setupConnectionsTracking` to start monitoring for idle HTTP1 connections. `setupConnectionsTracking` expects to have `this.connectionsCheckingInterval` property defined, but it does not exist on `Http2SecureServer`. This `undefined` value is passed to `setInterval`, which results in `checkConnections` being called on every tick, creating significant additional load on the server CPU. The fix is to define `this.connectionsCheckingInterval` on the Http2SecureServer instance. Refs: https://github.com/nodejs/node/pull/51569 --- lib/internal/http2/core.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index c9dfc8a2769894..eda587bc51ef45 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -3185,6 +3185,7 @@ class Http2SecureServer extends TLSServer { if (options.allowHTTP1 === true) { this.headersTimeout = 60_000; // Minimum between 60 seconds or requestTimeout this.requestTimeout = 300_000; // 5 minutes + this.connectionsCheckingInterval = 30_000; // 30 seconds this.on('listening', setupConnectionsTracking); } if (typeof requestListener === 'function')