httperf是由HP开发的Web服务器性能测试工具,可以提供各种HTTP数据以分析服务器性能,仅能运行在Linux操作系统
简单的调用
httperf --server localhost --port 80 --num-conns 100 --rate 10 --timeout 1
httperf参数说明
- --server: 服务器主机名可以
- --uri:指定URI
- --rate: 请求速率
- --num-conn: 请求总数
- --num-call: 每个连接发送多少个请求
- --timeout: 超时
- --help
输出信息说明
Total: connections 100 requests 100 replies 100 test-duration 9.905 s
Connection rate: 10.1 conn/s (99.1 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 4.6 avg 5.6 max 19.9 median 4.5 stddev 2.0
Connection time [ms]: connect 1.4
Connection length [replies/conn]: 1.000
Request rate: 10.1 req/s (99.1 ms/req)
Request size [B]: 57.0
Reply rate [replies/s]: min 10.0 avg 10.0 max 10.0 stddev 0.0 (1 samples)
Reply time [ms]: response 4.1 transfer 0.0
Reply size [B]: header 219.0 content 204.0 footer 0.0 (total 423.0)
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0
CPU time [s]: user 2.71 system 7.08 (user 27.4% system 71.5% total 98.8%)
Net I/O: 4.7 KB/s (0.0*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
"Total" Results
Total
这行输出的是总结信息,比如由客户端初始化多少连接,发送请求数,请求得到回复数,测试花费的时间
Total: connections 100 requests 100 replies 100 test-duration 9.905 s
"Connection" Results
这个结果展示的TCP和服务器通信相关信息
在下面的行中显示的是新连接被初始化的速率是10.1个连接每秒,即初始化一个连接时间是99.1ms,最后一个数值显示的连接到服务器的时间
下一行输出的是连接成功的生命周期统计,一个是完整的生命周期就是连接的初始化到连接的关闭,即连接请求到服务器并且得到回复,在这行中连接最少(min)的生命周期是5.6ms,最大(Max)是19.9ms,平均是5.6毫秒,中位数4.5ms,偏差值为2.0ms
Connection time [ms]: min 4.6 avg 5.6 max 19.9 median 4.5 stddev 2.0
中位数,每组数中如果是奇数则取中间值,偶数则取两个中间值/2
接下来的一行是统计建立TCP连接到服务器所花费时间(包括失败的连接),在下面的示例中建立TCP连接的平均时间为1.4ms
Connection time [ms]: connect 1.4
在连接组的最后的一行,给出的是每个连接收到的响应数,通常HTTP/1.0中这个值最大为1(没有错误的情况下),但是在 Keep-Alives 或者 HTTP/1.1,这个值可以更高,因为一个连接可以接收多个响应
Connection length [replies/conn]: 1.000
"Request" Results
在Request组的第一行给出的HTTP请求的速率,比如下面的是每秒10.1个请求被发出,即99.1ms每个请求
Request rate: 10.1 req/s (99.1 ms/req)
只要没有使用持续连接(Keep-Alives)的情况下,Request
的结果集将会和Connection
结果集非常相似,然而,当使用持续连接的时候,多个请求可以由单个连接被发出,两个结果集将会不同
下一行给出的是平均请求的大小
Request size [B]: 57.0
"Reply" Results
对于简单的测试,Reply
的结果集可能是最感兴趣的部分,第一行展示的是响应速率
Reply rate [replies/s]: min 10.0 avg 10.0 max 10.0 stddev 0.0 (1 samples)
这行收集了几个维度的数据,分别是平均值,最小值,最大值,标准差,httperf每5秒收集一次这些数据,为得到更正确的值建议加长测试时间,建议150秒或者更大
下一行展示的服务器从请求中接收到第一个字节开始,到连接收到第一个字节所消耗的时间,transfer
传输的大小(由于传输量太少所以显示为0)
Reply time [ms]: response 4.1 transfer 0.0
下一步是统计每个回复的大小,每个维度的单位都是字节(bytes),且都是平均数,total
是前面的总和
Reply size [B]: header 219.0 content 204.0 footer 0.0 (total 423.0)
在一次测试返回状态码(status code)的计数,比如100,200
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0
Miscellaneous Results
在下面一行是对客户端CPU使用率的统计,User
用户模式,System
模式
CPU time [s]: user 2.71 system 7.08 (user 27.4% system 71.5% total 98.8%)
注意:CPU使用率总是小于100%,这是因为系统还有其它的进程在运行,为了测试准确性,建议在测试时不要运行一些CPU密集型的计算
下一行给出的是网络的吞吐量
Net I/O: 4.7 KB/s (0.0*10^6 bps)
"Errors"
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
The meaning of each error is described below:
total
发生错误的总数
client-timo
客户端超时计数,每次从生成请求开始,如果没有响应即超时
socket-timo
TCP连接失败,socket级别的超时
connrefused
连接被服务器拒绝的次数
connreset
TCP连接失败被重置的次数
fd-unavail
当这个数值大于意味这客户端已经超载
addrunavail
端口号错误,可以忽略
Thank HP