Nginx性能测试工具--httperf

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连接被服务器拒绝的次数

connresetTCP连接失败被重置的次数

fd-unavail 当这个数值大于意味这客户端已经超载

addrunavail 端口号错误,可以忽略

Thank HP

你的欣赏是我最大的动力

Yanxiong Huang

My name is Yanxiong Huang. graduated from Nanyang middle school.Love Linux,familiar with Node.js,Docker,Serverless... and more Web technology.Contact Me:QQ 31356617;Email:huangaynxiong2013@gmail.com

guangzhou,china http://www.myfreax.com

乐在分享