version 2, including all changes.
.
| Rev |
Author |
# |
Line |
| 1 |
perry |
1 |
ab |
| |
|
2 |
!!!ab |
| |
|
3 |
NAME |
| |
|
4 |
SYNOPSIS |
| |
|
5 |
DESCRIPTION |
| |
|
6 |
OPTIONS |
| |
|
7 |
BUGS |
| |
|
8 |
SEE ALSO |
| |
|
9 |
---- |
| |
|
10 |
!!NAME |
| |
|
11 |
|
| |
|
12 |
|
| |
|
13 |
ab - Apache HTTP server benchmarking tool |
| |
|
14 |
!!SYNOPSIS |
| |
|
15 |
|
| |
|
16 |
|
| |
|
17 |
__ab__ [[ __-k__ ] [[ __-e__ ] [[ __-q__ ] [[ |
| |
|
18 |
__-S__ ] [[ __-i__ ] [[ __-s__ ] [[ __-n__ |
| |
|
19 |
''requests'' ] [[ __-t__ ''timelimit'' ] [[ __-c__ |
| |
|
20 |
''concurrency'' ] [[ __-p__ ''POST file'' ] [[ |
| |
|
21 |
__-A__ ''Authenticate username:password'' ] [[ |
| |
|
22 |
__-X__ ''proxy [[ :port ]'' ] [[ __-P__ ''Proxy |
| |
|
23 |
Authenticate username:password'' ] [[ __-H__ ''Custom |
| |
|
24 |
header'' ] [[ __-C__ ''Cookie name=value'' ] [[ |
| |
|
25 |
__-T__ ''content-type'' ] [[ __-v__ ''verbosity'' |
| |
|
26 |
] ] [[ __-w__ ''output HTML'' ] ] [[ __-g__ ''output |
| |
|
27 |
GNUPLOT'' ] ] [[ __-e__ ''output CSV'' ] ] [[ |
| |
|
28 |
__-x__ '''' ] ] [[ __-y__ |
| |
|
29 |
'''' ] ] [[ __-z__ '' |
| |
|
30 |
'' ] |
| |
|
31 |
''[[http[[s]://]hostname[[:port]/path'' |
| |
|
32 |
|
| |
|
33 |
|
| |
|
34 |
__ab__ [[ __-V__ ] [[ __-h__ ] |
| |
|
35 |
!!DESCRIPTION |
| |
|
36 |
|
| |
|
37 |
|
| |
|
38 |
__ab__ is a tool for benchmarking the performance of your |
| 2 |
perry |
39 |
Apache !HyperText Transfer Protocol (HTTP) server. It does |
| 1 |
perry |
40 |
this by giving you an indication of how many requests per |
| |
|
41 |
second your Apache installation can serve. |
| |
|
42 |
!!OPTIONS |
| |
|
43 |
|
| |
|
44 |
|
| 2 |
perry |
45 |
__-k__ Enable the HTTP !KeepAlive feature; that is, |
| 1 |
perry |
46 |
perform multiple requests within one HTTP session. Default |
| 2 |
perry |
47 |
is no !KeepAlive. |
| 1 |
perry |
48 |
|
| |
|
49 |
|
| |
|
50 |
__-d__ Do not display the |
| |
|
51 |
__ |
| |
|
52 |
|
| |
|
53 |
|
| |
|
54 |
__-S__ Do not display the median and standard deviation |
| |
|
55 |
values, nor display the warning/error messages when the |
| |
|
56 |
average and median are more than one or two times the |
| |
|
57 |
standard deviation apart. And default to the min/avg/max |
| |
|
58 |
values. (legacy support). |
| |
|
59 |
|
| |
|
60 |
|
| |
|
61 |
__-s__ When compiled in (bb -h will show you) use the SSL |
| |
|
62 |
protected __https__ rather than the __http__ protocol. |
| |
|
63 |
This feature is experimental and __very__ rudimentary. |
| |
|
64 |
You propably do not want to use it. |
| |
|
65 |
|
| |
|
66 |
|
| 2 |
perry |
67 |
__-k__ Enable the HTTP !KeepAlive feature; that is, |
| 1 |
perry |
68 |
perform multiple requests within one HTTP session. Default |
| 2 |
perry |
69 |
is no !KeepAlive. __-i__ Use an HTTP 'HEAD' instead of the |
| 1 |
perry |
70 |
GET method. Cannot be mixed with POST. |
| |
|
71 |
|
| |
|
72 |
|
| |
|
73 |
__-n__ ''requests'' |
| |
|
74 |
|
| |
|
75 |
|
| |
|
76 |
The number of requests to perform for the benchmarking |
| |
|
77 |
session. The default is to perform just one single request, |
| |
|
78 |
which will not give representative benchmarking |
| |
|
79 |
results. |
| |
|
80 |
|
| |
|
81 |
|
| |
|
82 |
__-t__ ''timelimit'' |
| |
|
83 |
|
| |
|
84 |
|
| |
|
85 |
The number of seconds to spend benchmarking. Using this |
| |
|
86 |
option automatically set the number of requests for the |
| |
|
87 |
benchmarking session to 50000. Use this to benchmark the |
| |
|
88 |
server for a fixed period of time. By default, there is no |
| |
|
89 |
timelimit. |
| |
|
90 |
|
| |
|
91 |
|
| |
|
92 |
__-c__ ''concurrency'' |
| |
|
93 |
|
| |
|
94 |
|
| |
|
95 |
The number of simultaneous requests to perform. The default |
| |
|
96 |
is to perform one HTTP request at at time, that is, no |
| |
|
97 |
concurrency. |
| |
|
98 |
|
| |
|
99 |
|
| |
|
100 |
__-p__ ''POST file'' |
| |
|
101 |
|
| |
|
102 |
|
| |
|
103 |
A file containing data that the program will send to the |
| |
|
104 |
Apache server in any HTTP POST requests. |
| |
|
105 |
|
| |
|
106 |
|
| |
|
107 |
__-A__ ''Authorization |
| |
|
108 |
username:password'' |
| |
|
109 |
|
| |
|
110 |
|
| |
|
111 |
Supply Basic Authentication credentials to the server. The |
| |
|
112 |
username and password are separated by a single ':', and |
| |
|
113 |
sent as uuencoded data. The string is sent regardless of |
| |
|
114 |
whether the server needs it; that is, has sent a 401 |
| |
|
115 |
Authentication needed. |
| |
|
116 |
|
| |
|
117 |
|
| |
|
118 |
__-X__ ''proxy[[:port]'' |
| |
|
119 |
|
| |
|
120 |
|
| |
|
121 |
Route all requests through the proxy (at optional |
| |
|
122 |
port). |
| |
|
123 |
|
| |
|
124 |
|
| |
|
125 |
__-P__ ''Proxy-Authorization |
| |
|
126 |
username:password'' |
| |
|
127 |
|
| |
|
128 |
|
| |
|
129 |
Supply Basic Authentication credentials to a proxy en-route. |
| |
|
130 |
The username and password are separated by a single ':', and |
| |
|
131 |
sent as uuencoded data. The string is sent regardless of |
| |
|
132 |
whether the proxy needs it; that is, has sent a 407 Proxy |
| |
|
133 |
authentication needed. |
| |
|
134 |
|
| |
|
135 |
|
| |
|
136 |
__-C__ ''Cookie name=value'' |
| |
|
137 |
|
| |
|
138 |
|
| |
|
139 |
Add a 'Cookie:' line to the request. The argument is |
| |
|
140 |
typically a 'name=value' pair. This option may be |
| |
|
141 |
repeated. |
| |
|
142 |
|
| |
|
143 |
|
| |
|
144 |
__-p__ ''Header string'' |
| |
|
145 |
|
| |
|
146 |
|
| |
|
147 |
Append extra headers to the request. The argument is |
| |
|
148 |
typically in the form of a valid header line, usually a |
| |
|
149 |
colon separated field value pair, for example, |
| |
|
150 |
'Accept-Encoding: zip/zop;8bit'. |
| |
|
151 |
|
| |
|
152 |
|
| |
|
153 |
__-T__ ''content-type'' |
| |
|
154 |
|
| |
|
155 |
|
| |
|
156 |
The content-type header to use for POST data. |
| |
|
157 |
|
| |
|
158 |
|
| |
|
159 |
__-g__ ''gnuplot file'' |
| |
|
160 |
|
| |
|
161 |
|
| |
|
162 |
Write all measured values out as a 'gnuplot' or TSV (Tab |
| |
|
163 |
separate values) file. This file can easily be imported into |
| |
|
164 |
packages like Gnuplot, IDL, Mathematica, Igor or even |
| |
|
165 |
Excell. The labels are on the first line of the |
| |
|
166 |
file. |
| |
|
167 |
|
| |
|
168 |
|
| |
|
169 |
__-q__ When processing more than 150 requsts; __ab__ |
| |
|
170 |
outputs a progress count on __stderr__ every 10% or 100 |
| |
|
171 |
requests or so. The __-q__ flag qill suppress these |
| |
|
172 |
messages. |
| |
|
173 |
|
| |
|
174 |
|
| |
|
175 |
__-e__ ''CSV file'' |
| |
|
176 |
|
| |
|
177 |
|
| |
|
178 |
Write a Comma separated value (CSV) file which contains for |
| |
|
179 |
each percentage (from 1% to 100%) the time (in milli |
| |
|
180 |
seconds) it took to serve that percentage of the requests. |
| |
|
181 |
This is usually more usefull than the 'gnuplot' file; as the |
| |
|
182 |
results are already |
| |
|
183 |
|
| |
|
184 |
|
| |
|
185 |
__-v__ Sets the verbosity level. Level 4 and above prints |
| |
|
186 |
information on headers, level 3 and above prints response |
| |
|
187 |
codes (for example, 404, 200), and level 2 and above prints |
| |
|
188 |
warnings and informational messages. |
| |
|
189 |
|
| |
|
190 |
|
| |
|
191 |
__-w__ Print out results in HTML tables. The default |
| |
|
192 |
table is two columns wide, with a white |
| |
|
193 |
background. |
| |
|
194 |
|
| |
|
195 |
|
| |
|
196 |
__-x__ ''attributes'' |
| |
|
197 |
|
| |
|
198 |
|
| |
|
199 |
The string to use as attributes for |
| |
|
200 |
here__ |
| |
|
201 |
__ |
| |
|
202 |
|
| |
|
203 |
|
| |
|
204 |
__-y__ ''attributes'' |
| |
|
205 |
|
| |
|
206 |
|
| |
|
207 |
The string to use as attributes for |
| |
|
208 |
|
| |
|
209 |
|
| |
|
210 |
__-z__ ''attributes'' |
| |
|
211 |
|
| |
|
212 |
|
| |
|
213 |
The string to use as attributes for |
| |
|
214 |
|
| |
|
215 |
|
| |
|
216 |
__-V__ Display the version number and exit. |
| |
|
217 |
|
| |
|
218 |
|
| |
|
219 |
__-h__ Display usage information. |
| |
|
220 |
!!BUGS |
| |
|
221 |
|
| |
|
222 |
|
| |
|
223 |
There are various statically declared buffers of fixed |
| |
|
224 |
length. Combined with inefficient parsing of the command |
| |
|
225 |
line arguments, the response headers from the server, and |
| |
|
226 |
other external inputs, these buffers might |
| |
|
227 |
overflow. |
| |
|
228 |
|
| |
|
229 |
|
| |
|
230 |
__Ab__ does not implement HTTP/1.x fully; instead, it |
| |
|
231 |
only accepts some 'expected' forms of |
| |
|
232 |
responses. |
| |
|
233 |
|
| |
|
234 |
|
| |
|
235 |
The rather heavy use of __strstr(3)__ by the program may |
| |
|
236 |
skew performance results, since it uses significant CPU |
| |
|
237 |
resources. Make sure that performance limits are not hit by |
| |
|
238 |
__ab__ before your server's limit is |
| |
|
239 |
reached. |
| |
|
240 |
|
| |
|
241 |
|
| |
|
242 |
The HTML output is not as complete as the text |
| |
|
243 |
output. |
| |
|
244 |
|
| |
|
245 |
|
| |
|
246 |
Up to version 1.3d __ab__ has propably reported values |
| |
|
247 |
way to low for most measurements; as a single timeout (which |
| |
|
248 |
is usually in the order of seconds) will shift several |
| |
|
249 |
thousands of milli-second responses by a considerable |
| |
|
250 |
factor. This was further componded by a serious interger |
| |
|
251 |
overrun which would for realistic run's (i.e. those longer |
| |
|
252 |
than a few minutes) produce believable but totally bogus |
| |
|
253 |
results. Thanks to Sander Temme |
| |
|
254 |
__ |
| |
|
255 |
!!SEE ALSO |
| |
|
256 |
|
| |
|
257 |
|
| |
|
258 |
__apache(8)__ |
| |
|
259 |
---- |