networking tcp_flow_control ai_generated true

TCP window full: receiver window size 0, zero window probe sent

ID: networking/tcp-window-full

Also available as: JSON · Markdown
82%Fix Rate
85%Confidence
45Evidence
2023-01-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
any active

Root Cause

The TCP receiver advertised a window size of zero, meaning its receive buffer is full and it cannot accept more data. The sender stops transmitting and sends periodic zero window probes. This indicates the receiving application is not reading data from the socket fast enough.

generic

Workarounds

  1. 85% success Optimize the receiving application to read from the socket faster
    1. Profile the receiving application for bottlenecks: perf top -p PID or strace -p PID
    2. Check if the application is blocked on I/O, locks, or CPU-intensive processing
    3. Use non-blocking I/O or async frameworks to decouple network reads from processing
    4. Consider a dedicated reader thread that buffers incoming data into an application queue
    5. If the receiver writes to disk, use buffered I/O or write to faster storage
    6. Monitor socket buffer fill level: ss -tnm | grep the_connection
  2. 78% success Increase the TCP receive buffer size on the receiver
    1. Check current buffer sizes: sysctl net.ipv4.tcp_rmem
    2. Increase: sysctl -w net.ipv4.tcp_rmem='4096 131072 16777216'
    3. Also increase: sysctl -w net.core.rmem_max=16777216
    4. This provides more buffer space for transient bursts but does not fix sustained slow consumption
    5. Monitor with: ss -tnm to see Recv-Q and window sizes
    6. Make persistent in /etc/sysctl.conf

Dead Ends

Common approaches that don't work:

  1. Increase the TCP send buffer on the sender side 85% fail

    The bottleneck is the receiver's inability to consume data from its receive buffer. Increasing the sender's buffer only allows more data to queue on the sender side but does not make the receiver process data faster.

  2. Disable TCP window scaling to avoid large window advertisements 80% fail

    Disabling window scaling limits the maximum window to 64KB, severely reducing throughput on high-bandwidth/high-latency links. It does not fix the application-level slow consumption problem.

Error Chain

Leads to:
Preceded by:
Frequently confused with: