You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AXIS2-6103 Correct HTTP/2 initialWindowSize guidance in transport docs
The docs recommended setting the client-side initialWindowSize to 65536
(64KB) to "align" with the server-side FlushingOutputStream 64KB flush
interval. These are independent settings: the flush interval controls
when serialized bytes enter the HTTP/2 framing layer (server-side,
64KB is correct), while initialWindowSize controls how much response
data can be in-flight per stream before the sender pauses for a
WINDOW_UPDATE (client-side, 64KB causes ~156 round-trips for a 10MB
response).
Changes:
- Raise default initialWindowSize from 65536 to 2097152 (2MB) in basic
config and parameter table
- Add callout box explaining flush interval vs flow-control window
- Add "Tuning for Different Workloads" section with guidance for
many-small, few-large, and mixed traffic patterns
- Add "Client-side vs server-side window" subsection explaining why
client-side tuning matters more for large-response workloads
- Fix Enterprise Big Data config: maxConcurrentStreams 50->4,
initialWindowSize 128KB->8MB, maxConnPerRoute 10->32
- Update WildFly guide with correction note on window alignment
- Fix simplified example initialWindowSize from 65536 to 2097152
<tr><td>maxConcurrentStreams</td><td>Maximum concurrent streams per connection</td><td>100</td><td>1-1000</td></tr>
124
-
<tr><td>initialWindowSize</td><td>Initial flow control window size (bytes)</td><td>65536</td><td>32KB-16MB</td></tr>
150
+
<tr><td>maxConcurrentStreams</td><td>Maximum concurrent streams per connection. Lower values (4-8) force the connection pool to spread streams across multiple TCP connections — better for workloads with few concurrent large payloads. Higher values (50-100) maximize multiplexing efficiency for many small concurrent requests.</td><td>100</td><td>1-1000</td></tr>
151
+
<tr><td>initialWindowSize</td><td>HTTP/2 per-stream flow-control window (bytes). Determines how much data can be in-flight per stream before the sender waits for a WINDOW_UPDATE. For payloads above 1 MB, use at least 1-2 MB to avoid excessive round-trips. Not related to the server-side FlushingOutputStream 64 KB flush interval.</td><td>2097152</td><td>64KB-16MB</td></tr>
125
152
<tr><td>serverPushEnabled</td><td>Enable HTTP/2 server push</td><td>false</td><td>true/false</td></tr>
<li><strong>64KB Buffer Alignment</strong> - Consistent across all layers (WildFly + Enhanced Moshi/GSON H2)</li>
54
-
<li><strong>128KB HTTP/2 Windows</strong> - Optimized for 50MB+ JSON payload processing</li>
53
+
<li><strong>64KB Buffer/Flush Alignment</strong> - WildFly byte-buffer-pool and FlushingOutputStream flush interval are aligned at 64KB. This is a server-side serialization setting and is correct.</li>
54
+
<li><strong>HTTP/2 Flow-Control Windows</strong> - Sized for payload, not aligned to flush interval. See
55
+
<ahref="http2-transport-additions.html#H2TransportSender">HTTP/2 Transport configuration</a>
56
+
for guidance on <code>initialWindowSize</code> tuning.</li>
0 commit comments