grpc network_error ai_generated true

DEADLINE_EXCEEDED: grpc: write deadline exceeded on stream 456 after 10000ms

ID: grpc/write-deadline-exceeded-on-stream

Also available as: JSON · Markdown · 中文
80%Fix Rate
87%Confidence
1Evidence
2024-01-20First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
gRPC C++ 1.60.0 active
gRPC Core 1.61.0 active
gRPC Ruby 1.62.0 active

Root Cause

The server took too long to write data to the stream, exceeding the configured write deadline, often due to slow network or blocked I/O.

generic

中文

服务器写入数据到流的时间过长,超过了配置的写入超时,通常由于网络缓慢或 I/O 阻塞。

Official Documentation

https://grpc.io/docs/guides/deadlines/

Workarounds

  1. 80% success Configure write deadline via channel args: `export GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE=65536` and set `GRPC_ARG_KEEPALIVE_TIME_MS=10000` to detect dead connections faster
    Configure write deadline via channel args: `export GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE=65536` and set `GRPC_ARG_KEEPALIVE_TIME_MS=10000` to detect dead connections faster
  2. 85% success In server code, use a separate goroutine with `context.WithTimeout` for write operations to handle slow clients gracefully
    In server code, use a separate goroutine with `context.WithTimeout` for write operations to handle slow clients gracefully

中文步骤

  1. 通过通道参数配置写入超时:`export GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE=65536` 并设置 `GRPC_ARG_KEEPALIVE_TIME_MS=10000` 以更快检测死连接
  2. 在服务器代码中,使用独立的 goroutine 配合 `context.WithTimeout` 处理写入操作,优雅处理慢客户端

Dead Ends

Common approaches that don't work:

  1. Increase the overall RPC deadline only, ignoring write deadline 70% fail

    Write deadline is separate; increased RPC deadline won't fix write-specific timeout.

  2. Restart the server to clear the stream state 80% fail

    The underlying network issue or blocking I/O persists.

  3. Set a very large write deadline (e.g., 60s) without investigating root cause 50% fail

    Masks the issue; slow writes can still cause user-perceived timeouts.