networking
tcp_flow_control
ai_generated
true
TCP window full: receiver window size 0, zero window probe sent
ID: networking/tcp-window-full
82%Fix Rate
85%Confidence
45Evidence
2023-01-01First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 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.
genericWorkarounds
-
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
-
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:
-
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.
-
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
Preceded by:
Frequently confused with: