diff --git a/.env.example b/.env.example index 9662f4b..7614a73 100644 --- a/.env.example +++ b/.env.example @@ -39,6 +39,7 @@ API_KEEP_ALIVE_TIMEOUT_MS=5000 API_REQUEST_TIMEOUT_MS=15000 API_HEADERS_TIMEOUT_MS=10000 API_MAX_REQUESTS_PER_SOCKET=100 +API_MAX_CONNECTIONS_PER_WORKER=500 # Docker json-file log rotation. Applies when using the compose files. DOCKER_LOG_MAX_SIZE=100m diff --git a/docker-compose.external-db.yml b/docker-compose.external-db.yml index 8c0f5a2..88d8506 100644 --- a/docker-compose.external-db.yml +++ b/docker-compose.external-db.yml @@ -79,6 +79,7 @@ services: API_REQUEST_TIMEOUT_MS: ${API_REQUEST_TIMEOUT_MS:-15000} API_HEADERS_TIMEOUT_MS: ${API_HEADERS_TIMEOUT_MS:-10000} API_MAX_REQUESTS_PER_SOCKET: ${API_MAX_REQUESTS_PER_SOCKET:-100} + API_MAX_CONNECTIONS_PER_WORKER: ${API_MAX_CONNECTIONS_PER_WORKER:-500} PM2_ENABLED: ${PM2_ENABLED:-true} STRATUM_WORKERS: ${STRATUM_WORKERS:-auto} STRATUM_PORTS: ${STRATUM_PORTS:-3333,3332,3331,3330} diff --git a/docker-compose.yml b/docker-compose.yml index f4b8ac5..48697e6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -109,6 +109,7 @@ services: API_REQUEST_TIMEOUT_MS: ${API_REQUEST_TIMEOUT_MS:-15000} API_HEADERS_TIMEOUT_MS: ${API_HEADERS_TIMEOUT_MS:-10000} API_MAX_REQUESTS_PER_SOCKET: ${API_MAX_REQUESTS_PER_SOCKET:-100} + API_MAX_CONNECTIONS_PER_WORKER: ${API_MAX_CONNECTIONS_PER_WORKER:-500} PM2_ENABLED: ${PM2_ENABLED:-true} STRATUM_WORKERS: ${STRATUM_WORKERS:-auto} STRATUM_PORTS: ${STRATUM_PORTS:-3333,3332,3331,3330} diff --git a/full-setup/docker-compose-mainnet.yml b/full-setup/docker-compose-mainnet.yml index 019b77d..279aa95 100644 --- a/full-setup/docker-compose-mainnet.yml +++ b/full-setup/docker-compose-mainnet.yml @@ -113,6 +113,7 @@ services: API_REQUEST_TIMEOUT_MS: ${API_REQUEST_TIMEOUT_MS:-15000} API_HEADERS_TIMEOUT_MS: ${API_HEADERS_TIMEOUT_MS:-10000} API_MAX_REQUESTS_PER_SOCKET: ${API_MAX_REQUESTS_PER_SOCKET:-100} + API_MAX_CONNECTIONS_PER_WORKER: ${API_MAX_CONNECTIONS_PER_WORKER:-500} PM2_ENABLED: "true" STRATUM_WORKERS: ${STRATUM_WORKERS:-2} STRATUM_MIN_DIFFICULTY: ${STRATUM_MIN_DIFFICULTY:-1} diff --git a/src/main.ts b/src/main.ts index d31e6fa..83967e5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,6 +15,7 @@ const DEFAULT_API_KEEP_ALIVE_TIMEOUT_MS = 5_000; const DEFAULT_API_REQUEST_TIMEOUT_MS = 15_000; const DEFAULT_API_HEADERS_TIMEOUT_MS = 10_000; const DEFAULT_API_MAX_REQUESTS_PER_SOCKET = 100; +const DEFAULT_API_MAX_CONNECTIONS_PER_WORKER = 500; function readPositiveInt(name: string, fallback: number): number { const value = Number(process.env[name]); @@ -93,6 +94,11 @@ async function bootstrap() { const server: any = app.getHttpServer(); server.headersTimeout = readPositiveInt('API_HEADERS_TIMEOUT_MS', DEFAULT_API_HEADERS_TIMEOUT_MS); + server.maxConnections = readPositiveInt( + 'API_MAX_CONNECTIONS_PER_WORKER', + DEFAULT_API_MAX_CONNECTIONS_PER_WORKER, + ); + server.dropMaxConnection = true; // --- Live-reload TLS certs/keys when they change on disk --- if (secure) {