ECONCSTRM grpc resource_error ai_generated true

INTERNAL: grpc: max concurrent streams exceeded on client for server localhost:8080

ID: grpc/max-concurrent-streams-exceeded-client

Also available as: JSON · Markdown · 中文
82%Fix Rate
88%Confidence
1Evidence
2024-03-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
gRPC v1.62.0 active
gRPC v1.59.0 active
gRPC v1.56.0 active
Go gRPC v1.63.0 active

Root Cause

Client-side gRPC stream multiplexing exceeds the configured maximum concurrent streams limit (default 100) per HTTP/2 connection.

generic

中文

客户端 gRPC 流多路复用超出了每个 HTTP/2 连接配置的最大并发流限制(默认 100)。

Official Documentation

https://grpc.io/docs/guides/performance/#connection-concurrency

Workarounds

  1. 85% success Increase the client-side max concurrent streams via channel config: `grpc.ChannelConfig{MaxConcurrentStreams: 200}` in Go, or `withMaxConcurrentStreams(200)` in C++.
    Increase the client-side max concurrent streams via channel config: `grpc.ChannelConfig{MaxConcurrentStreams: 200}` in Go, or `withMaxConcurrentStreams(200)` in C++.
  2. 78% success Create multiple gRPC channels to distribute streams across connections. Each channel gets its own HTTP/2 connection.
    Create multiple gRPC channels to distribute streams across connections. Each channel gets its own HTTP/2 connection.

中文步骤

  1. 通过通道配置增加客户端最大并发流数:Go 中使用 `grpc.ChannelConfig{MaxConcurrentStreams: 200}`,C++ 中使用 `withMaxConcurrentStreams(200)`。
  2. 创建多个 gRPC 通道以将流分布到多个连接上。每个通道都有自己的 HTTP/2 连接。

Dead Ends

Common approaches that don't work:

  1. Increasing server-side max concurrent streams 95% fail

    The error is client-side; server config doesn't affect client limits.

  2. Restarting the client without code changes 90% fail

    The limit is hit again under the same load pattern.

  3. Disabling HTTP/2 flow control 85% fail

    Flow control and stream limits are separate; disabling flow control doesn't increase stream count.