1 .\" Man page generated from reStructuredText.
3 .TH "H2LOAD" "1" "Jun 02, 2020" "1.41.0" "nghttp2"
5 h2load \- HTTP/2 benchmarking tool
7 .nr rst2man-indent-level 0
11 level \\n[rst2man-indent-level]
12 level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
19 .\" .rstReportMargin pre:
21 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
22 . nr rst2man-indent-level +1
23 .\" .rstReportMargin post:
27 .\" indent \\n[an-margin]
28 .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
29 .nr rst2man-indent-level -1
30 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
31 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
35 \fBh2load\fP [OPTIONS]... [URI]...
38 benchmarking tool for HTTP/2 server
42 Specify URI to access. Multiple URIs can be specified.
43 URIs are used in this order for each client. All URIs
44 are used, then first URI is used and then 2nd URI, and
45 so on. The scheme, host and port in the subsequent
46 URIs, if present, are ignored. Those in the first URI
47 are used solely. Definition of a base URI overrides all
48 scheme, host or port values.
53 .B \-n, \-\-requests=<N>
54 Number of requests across all clients. If it is used
55 with \fI\%\-\-timing\-script\-file\fP option, this option specifies
56 the number of requests each client performs rather than
57 the number of requests across all clients. This option
58 is ignored if timing\-based benchmarking is enabled (see
59 \fI\%\-\-duration\fP option).
65 .B \-c, \-\-clients=<N>
66 Number of concurrent clients. With \fI\%\-r\fP option, this
67 specifies the maximum number of connections to be made.
73 .B \-t, \-\-threads=<N>
74 Number of native threads.
80 .B \-i, \-\-input\-file=<PATH>
81 Path of a file with multiple URIs are separated by EOLs.
82 This option will disable URIs getting from command\-line.
83 If \(aq\-\(aq is given as <PATH>, URIs will be read from stdin.
84 URIs are used in this order for each client. All URIs
85 are used, then first URI is used and then 2nd URI, and
86 so on. The scheme, host and port in the subsequent
87 URIs, if present, are ignored. Those in the first URI
88 are used solely. Definition of a base URI overrides all
89 scheme, host or port values.
93 .B \-m, \-\-max\-concurrent\-streams=<N>
94 Max concurrent streams to issue per session. When
95 http/1.1 is used, this specifies the number of HTTP
96 pipelining requests in\-flight.
102 .B \-w, \-\-window\-bits=<N>
103 Sets the stream level initial window size to (2**<N>)\-1.
109 .B \-W, \-\-connection\-window\-bits=<N>
110 Sets the connection level initial window size to
117 .B \-H, \-\-header=<HEADER>
118 Add/Override a header to the requests.
122 .B \-\-ciphers=<SUITE>
123 Set allowed cipher list. The format of the string is
124 described in OpenSSL ciphers(1).
126 Default: \fBECDHE\-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\fP
130 .B \-p, \-\-no\-tls\-proto=<PROTOID>
131 Specify ALPN identifier of the protocol to be used when
132 accessing http URI without SSL/TLS.
133 Available protocols: h2c and http/1.1
139 .B \-d, \-\-data=<PATH>
140 Post FILE to server. The request method is changed to
141 POST. For http/1.1 connection, if \fI\%\-d\fP is used, the
142 maximum number of in\-flight pipelined requests is set to
148 Specifies the fixed rate at which connections are
149 created. The rate must be a positive integer,
150 representing the number of connections to be made per
151 rate period. The maximum number of connections to be
152 made is given in \fI\%\-c\fP option. This rate will be
153 distributed among threads as evenly as possible. For
154 example, with \fI\%\-t\fP2 and \fI\%\-r\fP4, each thread gets 2
155 connections per period. When the rate is 0, the program
156 will run as it normally does, creating connections at
157 whatever variable rate it wants. The default value for
158 this option is 0. \fI\%\-r\fP and \fI\%\-D\fP are mutually exclusive.
162 .B \-\-rate\-period=<DURATION>
163 Specifies the time period between creating connections.
164 The period must be a positive number, representing the
165 length of the period in time. This option is ignored if
166 the rate option is not used. The default value for this
171 .B \-D, \-\-duration=<N>
172 Specifies the main duration for the measurements in case
173 of timing\-based benchmarking. \fI\%\-D\fP and \fI\%\-r\fP are mutually
178 .B \-\-warm\-up\-time=<DURATION>
179 Specifies the time period before starting the actual
180 measurements, in case of timing\-based benchmarking.
181 Needs to provided along with \fI\%\-D\fP option.
185 .B \-T, \-\-connection\-active\-timeout=<DURATION>
186 Specifies the maximum time that h2load is willing to
187 keep a connection open, regardless of the activity on
188 said connection. <DURATION> must be a positive integer,
189 specifying the amount of time to wait. When no timeout
190 value is set (either active or inactive), h2load will
191 keep a connection open indefinitely, waiting for a
196 .B \-N, \-\-connection\-inactivity\-timeout=<DURATION>
197 Specifies the amount of time that h2load is willing to
198 wait to see activity on a given connection. <DURATION>
199 must be a positive integer, specifying the amount of
200 time to wait. When no timeout value is set (either
201 active or inactive), h2load will keep a connection open
202 indefinitely, waiting for a response.
206 .B \-\-timing\-script\-file=<PATH>
207 Path of a file containing one or more lines separated by
208 EOLs. Each script line is composed of two tab\-separated
209 fields. The first field represents the time offset from
210 the start of execution, expressed as a positive value of
211 milliseconds with microsecond resolution. The second
212 field represents the URI. This option will disable URIs
213 getting from command\-line. If \(aq\-\(aq is given as <PATH>,
214 script lines will be read from stdin. Script lines are
215 used in order for each client. If \fI\%\-n\fP is given, it must
216 be less than or equal to the number of script lines,
217 larger values are clamped to the number of script lines.
218 If \fI\%\-n\fP is not given, the number of requests will default
219 to the number of script lines. The scheme, host and
220 port defined in the first URI are used solely. Values
221 contained in other URIs, if present, are ignored.
222 Definition of a base URI overrides all scheme, host or
227 .B \-B, \-\-base\-uri=(<URI>|unix:<PATH>)
228 Specify URI from which the scheme, host and port will be
229 used for all requests. The base URI overrides all
230 values defined either at the command line or inside
231 input files. If argument starts with "unix:", then the
232 rest of the argument will be treated as UNIX domain
233 socket path. The connection is made through that path
234 instead of TCP. In this case, scheme is inferred from
235 the first URI appeared in the command line or inside
236 input files as usual.
240 .B \-\-npn\-list=<LIST>
241 Comma delimited list of ALPN protocol identifier sorted
242 in the order of preference. That means most desirable
243 protocol comes first. This is used in both ALPN and
244 NPN. The parameter must be delimited by a single comma
245 only and any white spaces are treated as a part of
248 Default: \fBh2,h2\-16,h2\-14,http/1.1\fP
253 Short hand for \fI\%\-\-npn\-list\fP=http/1.1
254 \fI\%\-\-no\-tls\-proto\fP=http/1.1, which effectively force
255 http/1.1 for both http and https URI.
259 .B \-\-header\-table\-size=<SIZE>
260 Specify decoder header table size.
266 .B \-\-encoder\-header\-table\-size=<SIZE>
267 Specify encoder header table size. The decoder (server)
268 specifies the maximum dynamic table size it accepts.
269 Then the negotiated dynamic table size is the minimum of
270 this option value and the value which server specified.
276 .B \-\-log\-file=<PATH>
277 Write per\-request information to a file as tab\-separated
278 columns: start time as microseconds since epoch; HTTP
279 status code; microseconds until end of response. More
280 columns may be added later. Rows are ordered by end\-of\-
281 response time when using one worker thread, but may
282 appear slightly out of order with multiple threads due
283 to buffering. Status code is \-1 for failed streams.
287 .B \-\-connect\-to=<HOST>[:<PORT>]
288 Host and port to connect instead of using the authority
294 Output debug information.
299 Display version information and exit.
304 Display this help and exit.
307 The <SIZE> argument is an integer and an optional unit (e.g., 10K is
308 10 * 1024). Units are K, M and G (powers of 1024).
310 The <DURATION> argument is an integer and an optional unit (e.g., 1s
311 is 1 second and 500ms is 500 milliseconds). Units are h, m, s or ms
312 (hours, minutes, seconds and milliseconds, respectively). If a unit
313 is omitted, a second is used as unit.
321 The number of requests h2load was instructed to make.
324 The number of requests h2load has started.
327 The number of requests completed.
330 The number of requests completed successfully. Only HTTP status
331 code 2xx or3xx are considered as success.
334 The number of requests failed, including HTTP level failures
335 (non\-successful HTTP status code).
338 The number of requests failed, except for HTTP level failures.
339 This is the subset of the number reported in \fBfailed\fP and most
340 likely the network level failures or stream was reset by
344 The number of requests whose connection timed out before they were
345 completed. This is the subset of the number reported in
350 The number of status code h2load received.
356 The number of bytes received from the server "on the wire". If
357 requests were made via TLS, this value is the number of decrypted
361 The number of response header bytes from the server without
362 decompression. The \fBspace savings\fP shows efficiency of header
363 compression. Let \fBdecompressed(headers)\fP to the number of bytes
364 used for header fields after decompression. The \fBspace savings\fP
365 is calculated by (1 \- \fBheaders\fP / \fBdecompressed(headers)\fP) *
366 100. For HTTP/1.1, this is usually 0.00%, since it does not have
367 header compression. For HTTP/2, it shows some insightful numbers.
370 The number of response body bytes received from the server.
377 The minimum time taken for request and response.
380 The maximum time taken for request and response.
383 The mean time taken for request and response.
386 The standard deviation of the time taken for request and response.
389 The fraction of the number of requests within standard deviation
390 range (mean +/\- sd) against total number of successful requests.
397 The minimum time taken to connect to a server including TLS
401 The maximum time taken to connect to a server including TLS
405 The mean time taken to connect to a server including TLS
409 The standard deviation of the time taken to connect to a server.
412 The fraction of the number of connections within standard
413 deviation range (mean +/\- sd) against total number of successful
417 .B time for 1st byte (of (decrypted in case of TLS) application data)
421 The minimum time taken to get 1st byte from a server.
424 The maximum time taken to get 1st byte from a server.
427 The mean time taken to get 1st byte from a server.
430 The standard deviation of the time taken to get 1st byte from a
434 The fraction of the number of connections within standard
435 deviation range (mean +/\- sd) against total number of successful
443 The minimum request per second among all clients.
446 The maximum request per second among all clients.
449 The mean request per second among all clients.
452 The standard deviation of request per second among all clients.
456 The fraction of the number of connections within standard
457 deviation range (mean +/\- sd) against total number of successful
463 h2load sets large flow control window by default, and effectively
464 disables flow control to avoid under utilization of server
465 performance. To set smaller flow control window, use \fI\%\-w\fP and
466 \fI\%\-W\fP options. For example, use \fB\-w16 \-W16\fP to set default
467 window size described in HTTP/2 protocol specification.
470 \fBnghttp(1)\fP, \fBnghttpd(1)\fP, \fBnghttpx(1)\fP
474 2012, 2015, 2016, Tatsuhiro Tsujikawa
475 .\" Generated by docutils manpage writer.