Skip to content

Commit 876e806

Browse files
AXIS2-6103 Fix remaining 65536 initialWindowSize across all HTTP/2 docs
Update all config examples and tables in WildFly, Tomcat, Spring Boot, and integration guides to use initialWindowSize=2097152 (2MB) instead of 65536 (64KB). The 64KB value caused ~156 WINDOW_UPDATE round-trips per stream for 10MB responses. Server-side buffer/flush settings (buffer-size, streamingBufferSize, moshiStreamingBufferSize) remain at 64KB — those are serialization flush intervals, not flow-control windows.
1 parent df812ef commit 876e806

6 files changed

Lines changed: 24 additions & 18 deletions

src/site/xdoc/docs/http2-integration-guide.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ production-ready intelligent defaults. <strong>Minimal configuration required!</
314314
&lt;parameter name="PROTOCOL"&gt;HTTP/2.0&lt;/parameter&gt;
315315
&lt;!-- Optional: Override intelligent defaults if required --&gt;
316316
&lt;parameter name="maxConcurrentStreams"&gt;100&lt;/parameter&gt; &lt;!-- Default: 100 --&gt;
317-
&lt;parameter name="initialWindowSize"&gt;65536&lt;/parameter&gt; &lt;!-- Default: 65536 (64KB) --&gt;
317+
&lt;parameter name="initialWindowSize"&gt;2097152&lt;/parameter&gt; &lt;!-- Default: 2097152 (2MB: avoids flow-control round trips) --&gt;
318318
&lt;parameter name="maxConnectionsTotal"&gt;50&lt;/parameter&gt; &lt;!-- Default: 50 --&gt;
319319
&lt;parameter name="connectionTimeout"&gt;30000&lt;/parameter&gt; &lt;!-- Default: 30000 (30s) --&gt;
320320
&lt;parameter name="responseTimeout"&gt;300000&lt;/parameter&gt; &lt;!-- Default: 300000 (5m) --&gt;
@@ -355,7 +355,7 @@ msgContext.setProperty("FLOW_CONTROL_WINDOW_SIZE", 2097152); // 2MB
355355
maxConcurrentStreams = 100 (Memory-constrained: vs library default 1000)
356356
maxConnectionsTotal = 50 (Memory-constrained: vs library default 100)
357357
maxConnectionsPerRoute = 10 (Route-specific limit: vs library default 20)
358-
initialWindowSize = 65536 (64KB optimized for large JSON payloads)
358+
initialWindowSize = 2097152 (2MB: avoids flow-control round trips)
359359
streamingBufferSize = 65536 (64KB chunks for 50MB+ processing)
360360
connectionKeepAliveTime = 300000 (5 minutes balanced timeout)
361361
responseTimeout = 300000 (5 minutes for large payload processing)

src/site/xdoc/docs/http2-transport-additions.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ options.setProperty("HTTP2_MEMORY_OPTIMIZATION", Boolean.TRUE);
457457
&lt;transportSender name="h2" class="org.apache.axis2.transport.h2.impl.httpclient5.H2TransportSender"&gt;
458458
&lt;parameter name="PROTOCOL"&gt;HTTP/2.0&lt;/parameter&gt;
459459
&lt;parameter name="maxConcurrentStreams"&gt;100&lt;/parameter&gt;
460-
&lt;parameter name="initialWindowSize"&gt;65536&lt;/parameter&gt;
460+
&lt;parameter name="initialWindowSize"&gt;2097152&lt;/parameter&gt;
461461
&lt;parameter name="http2FallbackEnabled"&gt;true&lt;/parameter&gt;
462462
&lt;/transportSender&gt;
463463
</pre>

src/site/xdoc/docs/json-springboot-tomcat11-userguide.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ sender configuration to your axis2.xml file:</p>
418418
class="org.apache.axis2.transport.h2.impl.httpclient5.H2TransportSender"&gt;
419419
&lt;parameter name="PROTOCOL"&gt;HTTP/2.0&lt;/parameter&gt;
420420
&lt;parameter name="maxConcurrentStreams"&gt;100&lt;/parameter&gt;
421-
&lt;parameter name="initialWindowSize"&gt;65536&lt;/parameter&gt;
421+
&lt;parameter name="initialWindowSize"&gt;2097152&lt;/parameter&gt;
422422
&lt;parameter name="serverPushEnabled"&gt;false&lt;/parameter&gt;
423423
&lt;parameter name="connectionTimeout"&gt;30000&lt;/parameter&gt;
424424
&lt;parameter name="responseTimeout"&gt;300000&lt;/parameter&gt;

src/site/xdoc/docs/json-springboot-userguide.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ sender configuration to your axis2.xml file:</p>
319319
class="org.apache.axis2.transport.h2.impl.httpclient5.H2TransportSender"&gt;
320320
&lt;parameter name="PROTOCOL"&gt;HTTP/2.0&lt;/parameter&gt;
321321
&lt;parameter name="maxConcurrentStreams"&gt;100&lt;/parameter&gt;
322-
&lt;parameter name="initialWindowSize"&gt;65536&lt;/parameter&gt;
322+
&lt;parameter name="initialWindowSize"&gt;2097152&lt;/parameter&gt;
323323
&lt;parameter name="serverPushEnabled"&gt;false&lt;/parameter&gt;
324324
&lt;parameter name="connectionTimeout"&gt;30000&lt;/parameter&gt;
325325
&lt;parameter name="responseTimeout"&gt;300000&lt;/parameter&gt;

src/site/xdoc/docs/tomcat-http2-integration-guide.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
&lt;!-- ALIGNED: Buffer sizes match Enhanced Moshi H2 --&gt;
9393
upgradeAsyncTimeout="300000" &lt;!-- HTTP/2 upgrade timeout --&gt;
9494
http2MaxConcurrentStreams="200" &lt;!-- High concurrency --&gt;
95-
http2InitialWindowSize="65536" &lt;!-- 64KB - matches Enhanced Moshi H2 --&gt;
95+
http2InitialWindowSize="2097152" &lt;!-- 2MB: avoids flow-control round trips --&gt;
9696
http2MaxFrameSize="32768" &lt;!-- 32KB - aligned with buffer management --&gt;
9797
http2MaxHeaderTableSize="8192" &lt;!-- 8KB header table --&gt;
9898
http2MaxHeaderListSize="32768" &lt;!-- 32KB header list --&gt;
@@ -144,7 +144,7 @@
144144
<table border="1">
145145
<tr><th>Parameter</th><th>Tomcat 11 Value</th><th>Optimization Purpose</th><th>WildFly Equivalent</th></tr>
146146
<tr><td><strong>http2MaxConcurrentStreams</strong></td><td>200</td><td>High multiplexing for large JSON APIs</td><td>http2-max-concurrent-streams="200"</td></tr>
147-
<tr><td><strong>http2InitialWindowSize</strong></td><td>65536 (64KB)</td><td>Aligned with Enhanced Moshi H2 buffers</td><td>http2-initial-window-size="65536"</td></tr>
147+
<tr><td><strong>http2InitialWindowSize</strong></td><td>2097152 (2MB)</td><td>Avoids flow-control round trips on large responses</td><td>http2-initial-window-size="2097152"</td></tr>
148148
<tr><td><strong>http2MaxFrameSize</strong></td><td>32768 (32KB)</td><td>Optimal for JSON streaming</td><td>http2-max-frame-size="32768"</td></tr>
149149
<tr><td><strong>maxPostSize</strong></td><td>104857600 (100MB)</td><td>Large JSON payload support</td><td>max-post-size="104857600"</td></tr>
150150
<tr><td><strong>connectionTimeout</strong></td><td>300000 (5min)</td><td>Large payload processing time</td><td>no-request-timeout="300000"</td></tr>
@@ -191,7 +191,7 @@
191191

192192
&lt;!-- Coordination with Tomcat 11 HTTP/2 --&gt;
193193
&lt;parameter name="maxConcurrentStreams"&gt;200&lt;/parameter&gt; &lt;!-- Matches Tomcat --&gt;
194-
&lt;parameter name="initialWindowSize"&gt;65536&lt;/parameter&gt; &lt;!-- 64KB - matches Tomcat --&gt;
194+
&lt;parameter name="initialWindowSize"&gt;2097152&lt;/parameter&gt; &lt;!-- 2MB: avoids flow-control round trips --&gt;
195195
&lt;parameter name="maxFrameSize"&gt;32768&lt;/parameter&gt; &lt;!-- 32KB - matches Tomcat --&gt;
196196
&lt;parameter name="maxConnectionsTotal"&gt;50&lt;/parameter&gt;
197197
&lt;parameter name="maxConnectionsPerRoute"&gt;10&lt;/parameter&gt;

src/site/xdoc/docs/wildfly-http2-integration-guide.xml

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,16 @@ large-payload workloads. See
200200
<td>✅ WildFly manages 128 concurrent HTTP/2 streams, Moshi H2 handles async processing for large payloads</td>
201201
</tr>
202202
<tr>
203-
<td><strong>Buffer Management</strong></td>
204-
<td><code>http2-initial-window-size="65535"</code></td>
203+
<td><strong>Flow Control Window</strong></td>
204+
<td><code>http2-initial-window-size="2097152"</code></td>
205+
<td><code>initialWindowSize="2097152"</code> (in axis2.xml)</td>
206+
<td>✅ 2MB window prevents round-trip latency on large responses</td>
207+
</tr>
208+
<tr>
209+
<td><strong>Streaming Flush Buffer</strong></td>
210+
<td><code>buffer-size="65536"</code></td>
205211
<td><code>moshiStreamingBufferSize="65536"</code></td>
206-
<td>✅ Aligned buffer sizes prevent memory waste and optimize streaming</td>
212+
<td>✅ 64KB server-side flush interval — good TTFB, independent of flow-control window</td>
207213
</tr>
208214
<tr>
209215
<td><strong>Large Payload Handling</strong></td>
@@ -243,7 +249,7 @@ large-payload workloads. See
243249
enable-http2="true"
244250
http2-enable-push="false"
245251
http2-header-table-size="4096" &lt;!-- Conservative headers --&gt;
246-
http2-initial-window-size="65536" &lt;!-- Matches Enhanced Moshi H2 buffer --&gt;
252+
http2-initial-window-size="2097152" &lt;!-- 2MB: avoids flow-control round trips --&gt;
247253
http2-max-concurrent-streams="100" &lt;!-- Coordinated with transport-h2 --&gt;
248254
http2-max-frame-size="32768" &lt;!-- ALIGNED: Matches buffer pool --&gt;
249255
http2-max-header-list-size="16384" &lt;!-- Sufficient for JSON APIs --&gt;
@@ -305,10 +311,10 @@ Complete HTTP/2 + JSON Optimization Stack:
305311
</tr>
306312
<tr>
307313
<td><strong>Window Sizes</strong></td>
308-
<td><code>http2-initial-window-size="65536"</code></td>
309-
<td><code>initialWindowSize="65536"</code></td>
314+
<td><code>http2-initial-window-size="2097152"</code></td>
315+
<td><code>initialWindowSize="2097152"</code></td>
310316
<td><code>AsyncProcessingThreshold="1MB"</code></td>
311-
<td>✅ <strong>COORDINATED</strong>: 64KB windows, 1MB async threshold</td>
317+
<td>✅ <strong>TUNED</strong>: 2MB flow-control windows, 1MB async threshold</td>
312318
</tr>
313319
<tr>
314320
<td><strong>Stream Limits</strong></td>
@@ -390,7 +396,7 @@ Complete HTTP/2 + JSON Optimization Stack:
390396
enable-http2="true"
391397
http2-enable-push="false"
392398
http2-header-table-size="4096"
393-
http2-initial-window-size="65536" &lt;!-- Matches transport-h2 + Moshi --&gt;
399+
http2-initial-window-size="2097152" &lt;!-- 2MB: avoids flow-control round trips --&gt;
394400
http2-max-concurrent-streams="100" &lt;!-- Matches transport-h2 limit --&gt;
395401
http2-max-frame-size="32768" &lt;!-- ALIGNED: Matches buffer pool --&gt;
396402
http2-max-header-list-size="16384"
@@ -406,7 +412,7 @@ Complete HTTP/2 + JSON Optimization Stack:
406412
enable-http2="true"
407413
http2-enable-push="false"
408414
http2-header-table-size="4096"
409-
http2-initial-window-size="65536" &lt;!-- Matches transport-h2 + Moshi --&gt;
415+
http2-initial-window-size="2097152" &lt;!-- 2MB: avoids flow-control round trips --&gt;
410416
http2-max-concurrent-streams="100" &lt;!-- Matches transport-h2 limit --&gt;
411417
http2-max-frame-size="32768" &lt;!-- ALIGNED: Matches buffer pool --&gt;
412418
http2-max-header-list-size="16384"
@@ -464,7 +470,7 @@ Complete HTTP/2 + JSON Optimization Stack:
464470

465471
&lt;!-- Coordination with WildFly HTTP/2 --&gt;
466472
&lt;parameter name="maxConcurrentStreams"&gt;100&lt;/parameter&gt; &lt;!-- Matches WildFly --&gt;
467-
&lt;parameter name="initialWindowSize"&gt;65536&lt;/parameter&gt; &lt;!-- Matches WildFly + Moshi --&gt;
473+
&lt;parameter name="initialWindowSize"&gt;2097152&lt;/parameter&gt; &lt;!-- 2MB: avoids flow-control round trips --&gt;
468474
&lt;parameter name="maxConnectionsTotal"&gt;50&lt;/parameter&gt;
469475
&lt;parameter name="maxConnectionsPerRoute"&gt;10&lt;/parameter&gt;
470476
&lt;parameter name="connectionTimeout"&gt;30000&lt;/parameter&gt;

0 commit comments

Comments
 (0)