Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5756396
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: 架构设计与优化

2014-08-21 13:15:20

        http_load与apache ab是非常不错的服务器性能和压力测试工具,本文将简要介绍如何使用这两个工具。
一、http_load
1、简介
        http_load以并行复用的方式运行,用以测试Web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,其可以以一个单一的进程运行,这样就不会把客户机搞死,还可以测试HTTPS类的网站请求。关于http_load的详细信息参见,点击下载。
2、安装
        #tar xzvf http_load-14aug2014.tar.gz
        #cd http_load-14aug2014
        #make && make install
3、测试
        http_load的命令参数比较简单,直接在命令行下执行http_load就能看到,具体如下:
        -parallel简写-p:并发的用户进程数。
        -fetches简写-f:总计的访问次数
        -rate简写-r:每秒的访问频率
        -seconds简写-s:总计的访问时间
        http_load的命令格式也比较简单,各参数可以自由组合,常用格式如下:
        #http_load -p 并发访问进程数 -s 访问时间 需要访问的URL文件
        #http_load -r 每秒访问频率 -s 访问时间 需要访问的URL文件
        这里以百度首页测试为例说明之:
        #vi baidu.url
       
        当然上面存放请求URL的文件中,可以存放多个URL,每行一个。
        #http_load -p 5 -s 300 baidu.url
        11694 fetches, 5 max parallel, 5.6872e+08 bytes, in 300 seconds
        48633.5 mean bytes/connection
        38.98 fetches/sec, 1.89573e+06 bytes/sec
        msecs/connect: 10.476 mean, 9008.81 max, 5.002 min
        msecs/first-response: 36.5928 mean, 5383.94 max, 16.614 min
        7 timeouts
        10428 bad byte counts
        HTTP response codes:
          code 200 -- 7552
        上面命令表示:5个并发进程,持续300秒请求百度首页。
        --------------------------------------------------------------------------------------------
        #http_load -r 5 -s 300 baidu.url
        1499 fetches, 5 max parallel, 9.49031e+07 bytes, in 300.017 seconds
        63310.9 mean bytes/connection
        4.99638 fetches/sec, 316326 bytes/sec
        msecs/connect: 21.5961 mean, 3020.17 max, 16.782 min
        msecs/first-response: 36.6554 mean, 61.907 max, 17.919 min
        1261 bad byte counts
        HTTP response codes:
          code 200 -- 1261
        上面命令表示:每秒频率为5条请求,持续300秒请求百度首页,结果分析如下:
        (1)1499 fetches, 5 max parallel, 9.49031e+07 bytes, in 300.017 seconds
        说明在上面的测试中运行了1499个请求,最大的并发进程数是5,总计传输的数据是9.49031e+07 bytes,运行的时间是300.017
        (2)63310.9 mean bytes/connection
        说明每个连接平均传输的数据量63310.9/1499=42.24
        (3)4.99638 fetches/sec, 316326 bytes/sec
        说明每秒的响应请求为4.99638,每秒传递的数据为316326 bytes/sec
        (4)msecs/connect: 21.5961 mean, 3020.17 max, 16.782 min
        说明每个连接的平均响应时间是21.5961 msecs,最大的响应时间3020.17 msecs,最小的响应时间16.782 msecs
        (5)HTTP response codes: code 200 — 1261   
        说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈
        特殊说明:测试结果中主要的指标是fetches/sec和msecs/connect,即服务器每秒能够响应的请求次数和每个连接的平均响应时间。当然仅有这两个指标并不能完成对性能的分析,这两个指标主要反映的是QPS和RT。此外,还需要对服务器的CPU(idle和load)、Mem进行分析,才能得出结论。
        需要注意的是:http_load请求方式默认为GET方式,不支持POST方式。

二、apache ab
1、简介
        ab即ApacheBench,是apache自带的一款功能强大的测试工具,安装了apache一般就自带了,即httpd(在bin目录下)。
        ab可以同时模拟多个并发请求,专门用于HTTP Server的benchmark testing。
        ab命令格式如下:
        ab [options] [http[s]://]hostname[:port]/path
        ab的参数比较多,行ab就能看到,常用参数如下:
        -n:请求数
        -c:并发数
        -p:请求数据文件,即postfile,包含POST数据
        -T:Content-type,用于在POST时指定header,比如:'application/x-www-form-urlencoded'或者'application/x-protobuf',缺省是'text/plain'
        -t:请求持续时间,单位为秒,默认发送50000请求,相当于-n 50000
        -k:使用HTTP KeepAlive特性
        --------------------------------------------------------------------------------------------
        -w:以HTML表的形式输出结果
        -i:执行HEAD请求而不是GET
        -C:cookie-name=value,为请求附加一个cookie,此参数可以重复
        -P:proxy-auth-name:password,对一个中转代理提供BASIC认证信任,用户名和密码由分号:隔开,并以base64编码形式发送
        需要注意的是:ab每次只能测试一个URL,适合做重复压力测试,支持POST方式。    
2、测试
        (1)如果要测试POST请求,可以使用如下命令:
        #ab -n 1000000 -c 100 -p bid_tweb_pause_proto.txt -T 'application/x-protobuf' ''
        上面命令表示模拟100个并发用户,发送1000000个POST请求到,POST数据从文件bid_tweb_pause_proto.txt读取,Content-type为application/x-protobuf。
        #
ab -t 300 -c 100 -p bid_tweb_pause_proto.txt -T 'application/x-protobuf' ''
        上面命令表示模拟100个并发用户,持续300秒发送POST,POST数据从文件bid_tweb_pause_proto.txt读取,Content-type为application/x-protobuf。
        需要注意的是:如果在发送请求完后,出现如下错误:
        apr_poll: The timeout specified has expired (70007)
        使用-k参数指定发送keep-alive指令到服务器端,可以解决上面问题:
        #ab -t 300 -c 100 -k -p bid_tweb_pause_proto.txt -T 'application/x-protobuf' ''

        (2)如果要测试GET请求,可以使用如下命令(这里以搜狗首页测试为例说明之):
        #ab -t 300 -c 5 -k 
        执行上面命令会出现如下错误:
        ab: invalid URL
        Usage: ab [options] [http[s]://]hostname[:port]/path
        上面错误的意思是URL后面要加/path,从提示也能看出来,可以改成如下即可:
        #ab -t 300 -c 5 -k /
        This is ApacheBench, Version 2.3 <$Revision: 655654 $>
        Copyright 1996 Adam Twiss, Zeus Technology Ltd,
        Licensed to The Apache Software Foundation,

        Benchmarking (be patient)
        Completed 5000 requests
        Finished 5211 requests

        Server Software:        nginx                            #被测试服务名称
        Server Hostname:                   #请求地址
        Server Port:            80                                    #请求端口号

        Document Path:          /                                   #请求页面
        Document Length:        15785 bytes                  #页面长度

        Concurrency Level:      5                                   #并发数
        Time taken for tests:   300.011 seconds             #整个测试持续的时间  
        Complete requests:      5211                             #完成的请求数
        Failed requests:        0                                       #失败的请求数
        Write errors:           0                                        
        Keep-Alive requests:    0
        Total transferred:      86136965 bytes                #总共传输字节数,包含http的头信息等
        HTML transferred:       82258493 bytes               #html字节数,实际的页面传递字节数
        Requests per second:    17.37 [#/sec] (mean)      #每秒请求数(这是一个非常重要的指标,即服务器的吞吐量)
        Time per request:       287.863 [ms] (mean)        #用户平均请求等待时间(这也是一个非常重要的指标,即请求延迟)
        Time per request:       57.573 [ms] (mean, across all concurrent requests)    #服务器平均处理时间,即服务器吞吐量的倒数
        Transfer rate:          280.38 [Kbytes/sec] received    #每秒网络上的流量(可以帮助排除是否存在网络流量过大导致响应时间延长的问题)

        Connection Times (ms)
                              min  mean[+/-sd] median   max
        Connect:           28       42 215.8     34      9034
        Processing:       86      233 2009.8   108    93465
        Waiting:            29       71 547.5     37      21034
        Total:              114      275 2031.9  143    93493

        Percentage of the requests served within a certain time (ms)
          50%    143        #50%的请求在143ms内返回
          66%    148        #60%的请求在148ms内返回
          75%    154
          80%    160
          90%    179
          95%    195
          98%    469
          99%   3158
         100%  93493 (longest request)    #最大响应时间小于93493ms
        特殊说明:测试结果中主要的指标是Requests per secondTime per request(第一个),即每秒请求数用户平均请求等待时间,这两个指标主要反映的是QPS和RT。

        
阅读(7516) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

scq2099yt2014-08-21 13:19:07

文明上网,理性发言...