2 .. GENERATED by help2rst.py. DO NOT EDIT DIRECTLY.
12 **h2load** [OPTIONS]... [URI]...
17 benchmarking tool for HTTP/2 server
21 Specify URI to access. Multiple URIs can be specified.
22 URIs are used in this order for each client. All URIs
23 are used, then first URI is used and then 2nd URI, and
24 so on. The scheme, host and port in the subsequent
25 URIs, if present, are ignored. Those in the first URI
26 are used solely. Definition of a base URI overrides all
27 scheme, host or port values.
32 .. option:: -n, --requests=<N>
34 Number of requests across all clients. If it is used
35 with :option:`--timing-script-file` option, this option specifies
36 the number of requests each client performs rather than
37 the number of requests across all clients. This option
38 is ignored if timing-based benchmarking is enabled (see
39 :option:`--duration` option).
43 .. option:: -c, --clients=<N>
45 Number of concurrent clients. With :option:`-r` option, this
46 specifies the maximum number of connections to be made.
50 .. option:: -t, --threads=<N>
52 Number of native threads.
56 .. option:: -i, --input-file=<PATH>
58 Path of a file with multiple URIs are separated by EOLs.
59 This option will disable URIs getting from command-line.
60 If '-' is given as <PATH>, URIs will be read from stdin.
61 URIs are used in this order for each client. All URIs
62 are used, then first URI is used and then 2nd URI, and
63 so on. The scheme, host and port in the subsequent
64 URIs, if present, are ignored. Those in the first URI
65 are used solely. Definition of a base URI overrides all
66 scheme, host or port values.
68 .. option:: -m, --max-concurrent-streams=<N>
70 Max concurrent streams to issue per session. When
71 http/1.1 is used, this specifies the number of HTTP
72 pipelining requests in-flight.
76 .. option:: -w, --window-bits=<N>
78 Sets the stream level initial window size to (2\*\*<N>)-1.
82 .. option:: -W, --connection-window-bits=<N>
84 Sets the connection level initial window size to
89 .. option:: -H, --header=<HEADER>
91 Add/Override a header to the requests.
93 .. option:: --ciphers=<SUITE>
95 Set allowed cipher list. The format of the string is
96 described in OpenSSL ciphers(1).
98 Default: ``ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256``
100 .. option:: -p, --no-tls-proto=<PROTOID>
102 Specify ALPN identifier of the protocol to be used when
103 accessing http URI without SSL/TLS.
104 Available protocols: h2c and http/1.1
108 .. option:: -d, --data=<PATH>
110 Post FILE to server. The request method is changed to
111 POST. For http/1.1 connection, if :option:`-d` is used, the
112 maximum number of in-flight pipelined requests is set to
115 .. option:: -r, --rate=<N>
117 Specifies the fixed rate at which connections are
118 created. The rate must be a positive integer,
119 representing the number of connections to be made per
120 rate period. The maximum number of connections to be
121 made is given in :option:`-c` option. This rate will be
122 distributed among threads as evenly as possible. For
123 example, with :option:`-t`\2 and :option:`-r`\4, each thread gets 2
124 connections per period. When the rate is 0, the program
125 will run as it normally does, creating connections at
126 whatever variable rate it wants. The default value for
127 this option is 0. :option:`-r` and :option:`\-D` are mutually exclusive.
129 .. option:: --rate-period=<DURATION>
131 Specifies the time period between creating connections.
132 The period must be a positive number, representing the
133 length of the period in time. This option is ignored if
134 the rate option is not used. The default value for this
137 .. option:: -D, --duration=<N>
139 Specifies the main duration for the measurements in case
140 of timing-based benchmarking. :option:`-D` and :option:`\-r` are mutually
143 .. option:: --warm-up-time=<DURATION>
145 Specifies the time period before starting the actual
146 measurements, in case of timing-based benchmarking.
147 Needs to provided along with :option:`-D` option.
149 .. option:: -T, --connection-active-timeout=<DURATION>
151 Specifies the maximum time that h2load is willing to
152 keep a connection open, regardless of the activity on
153 said connection. <DURATION> must be a positive integer,
154 specifying the amount of time to wait. When no timeout
155 value is set (either active or inactive), h2load will
156 keep a connection open indefinitely, waiting for a
159 .. option:: -N, --connection-inactivity-timeout=<DURATION>
161 Specifies the amount of time that h2load is willing to
162 wait to see activity on a given connection. <DURATION>
163 must be a positive integer, specifying the amount of
164 time to wait. When no timeout value is set (either
165 active or inactive), h2load will keep a connection open
166 indefinitely, waiting for a response.
168 .. option:: --timing-script-file=<PATH>
170 Path of a file containing one or more lines separated by
171 EOLs. Each script line is composed of two tab-separated
172 fields. The first field represents the time offset from
173 the start of execution, expressed as a positive value of
174 milliseconds with microsecond resolution. The second
175 field represents the URI. This option will disable URIs
176 getting from command-line. If '-' is given as <PATH>,
177 script lines will be read from stdin. Script lines are
178 used in order for each client. If :option:`-n` is given, it must
179 be less than or equal to the number of script lines,
180 larger values are clamped to the number of script lines.
181 If :option:`-n` is not given, the number of requests will default
182 to the number of script lines. The scheme, host and
183 port defined in the first URI are used solely. Values
184 contained in other URIs, if present, are ignored.
185 Definition of a base URI overrides all scheme, host or
188 .. option:: -B, --base-uri=(<URI>|unix:<PATH>)
190 Specify URI from which the scheme, host and port will be
191 used for all requests. The base URI overrides all
192 values defined either at the command line or inside
193 input files. If argument starts with "unix:", then the
194 rest of the argument will be treated as UNIX domain
195 socket path. The connection is made through that path
196 instead of TCP. In this case, scheme is inferred from
197 the first URI appeared in the command line or inside
198 input files as usual.
200 .. option:: --npn-list=<LIST>
202 Comma delimited list of ALPN protocol identifier sorted
203 in the order of preference. That means most desirable
204 protocol comes first. This is used in both ALPN and
205 NPN. The parameter must be delimited by a single comma
206 only and any white spaces are treated as a part of
209 Default: ``h2,h2-16,h2-14,http/1.1``
213 Short hand for :option:`--npn-list`\=http/1.1
214 :option:`--no-tls-proto`\=http/1.1, which effectively force
215 http/1.1 for both http and https URI.
217 .. option:: --header-table-size=<SIZE>
219 Specify decoder header table size.
223 .. option:: --encoder-header-table-size=<SIZE>
225 Specify encoder header table size. The decoder (server)
226 specifies the maximum dynamic table size it accepts.
227 Then the negotiated dynamic table size is the minimum of
228 this option value and the value which server specified.
232 .. option:: --log-file=<PATH>
234 Write per-request information to a file as tab-separated
235 columns: start time as microseconds since epoch; HTTP
236 status code; microseconds until end of response. More
237 columns may be added later. Rows are ordered by end-of-
238 response time when using one worker thread, but may
239 appear slightly out of order with multiple threads due
240 to buffering. Status code is -1 for failed streams.
242 .. option:: --connect-to=<HOST>[:<PORT>]
244 Host and port to connect instead of using the authority
247 .. option:: -v, --verbose
249 Output debug information.
251 .. option:: --version
253 Display version information and exit.
255 .. option:: -h, --help
257 Display this help and exit.
261 The <SIZE> argument is an integer and an optional unit (e.g., 10K is
262 10 * 1024). Units are K, M and G (powers of 1024).
264 The <DURATION> argument is an integer and an optional unit (e.g., 1s
265 is 1 second and 500ms is 500 milliseconds). Units are h, m, s or ms
266 (hours, minutes, seconds and milliseconds, respectively). If a unit
267 is omitted, a second is used as unit.
276 The number of requests h2load was instructed to make.
278 The number of requests h2load has started.
280 The number of requests completed.
282 The number of requests completed successfully. Only HTTP status
283 code 2xx or3xx are considered as success.
285 The number of requests failed, including HTTP level failures
286 (non-successful HTTP status code).
288 The number of requests failed, except for HTTP level failures.
289 This is the subset of the number reported in ``failed`` and most
290 likely the network level failures or stream was reset by
293 The number of requests whose connection timed out before they were
294 completed. This is the subset of the number reported in
298 The number of status code h2load received.
302 The number of bytes received from the server "on the wire". If
303 requests were made via TLS, this value is the number of decrypted
306 The number of response header bytes from the server without
307 decompression. The ``space savings`` shows efficiency of header
308 compression. Let ``decompressed(headers)`` to the number of bytes
309 used for header fields after decompression. The ``space savings``
310 is calculated by (1 - ``headers`` / ``decompressed(headers)``) *
311 100. For HTTP/1.1, this is usually 0.00%, since it does not have
312 header compression. For HTTP/2, it shows some insightful numbers.
314 The number of response body bytes received from the server.
318 The minimum time taken for request and response.
320 The maximum time taken for request and response.
322 The mean time taken for request and response.
324 The standard deviation of the time taken for request and response.
326 The fraction of the number of requests within standard deviation
327 range (mean +/- sd) against total number of successful requests.
331 The minimum time taken to connect to a server including TLS
334 The maximum time taken to connect to a server including TLS
337 The mean time taken to connect to a server including TLS
340 The standard deviation of the time taken to connect to a server.
342 The fraction of the number of connections within standard
343 deviation range (mean +/- sd) against total number of successful
346 time for 1st byte (of (decrypted in case of TLS) application data)
348 The minimum time taken to get 1st byte from a server.
350 The maximum time taken to get 1st byte from a server.
352 The mean time taken to get 1st byte from a server.
354 The standard deviation of the time taken to get 1st byte from a
357 The fraction of the number of connections within standard
358 deviation range (mean +/- sd) against total number of successful
363 The minimum request per second among all clients.
365 The maximum request per second among all clients.
367 The mean request per second among all clients.
369 The standard deviation of request per second among all clients.
372 The fraction of the number of connections within standard
373 deviation range (mean +/- sd) against total number of successful
379 h2load sets large flow control window by default, and effectively
380 disables flow control to avoid under utilization of server
381 performance. To set smaller flow control window, use :option:`-w` and
382 :option:`-W` options. For example, use ``-w16 -W16`` to set default
383 window size described in HTTP/2 protocol specification.
388 :manpage:`nghttp(1)`, :manpage:`nghttpd(1)`, :manpage:`nghttpx(1)`