网站压力测试工具

在我们的博客中, 记录了我们在开发过程中所使用的技术和遇到的问题, 希望作为其他开发和设计者的一个学习交流平台.

网站压力测试工具


转自: http://www.yeolar.com/note/2012/11/24/web-bench-test/

网站压力测试就是测试网站能够承受多大的访问量,以及在大访问量的情况下网站的性能。这些指标会直接影响用户的体验,因此在网站上线前一般都要做压力测试。压力测试也是考察网站使用的相关web服务器和框架的一个重要手段。

因为和真实的环境不同,压力测试通过模拟得到的结果不会和实际的负载完全相同,但它仍是一个很好的基准比较。做压力测试时也会尽可能地模拟实际的情况。

网上大家推荐的较为常见的网站压力测试工具有ab、webbench、http_load、siege、curl-loader、multi-mechanize、tcpcopy等。

这里的大部分测试工具采用事件驱动模型来创建模拟用户,比如ab使用 apr 包中的 apr_pollset_poll 函数,而其他的工具都使用 select 函数,只有webbench通过 fork 子进程来创建模拟用户,它能模拟的并发数更高。

我把大家的一些总结列在这里:

ab

Apache自带的压力测试工具,还有一个 独立版本 。主要用于测试网站的每秒处理请求数,多用于静态压力测试。基本用法是:

    $ ab -n 1000 -c 50 http://192.168.1.101/
        -n	总请求数
        -c	并发连接数

输出的结果如下:

    Server Software:        Apache/2.2.16
    Server Hostname:        192.168.1.101
    Server Port:            80

    Document Path:          /                               请求文档路径
    Document Length:        14643 bytes                     请求文档大小

    Concurrency Level:      50                              并发数
    Time taken for tests:   38.724 seconds                  总测试时间
    Complete requests:      1000                            全部请求数
    Failed requests:        14                              失败请求数
       (Connect: 0, Receive: 0, Length: 14, Exceptions: 0)
    Write errors:           14
    Total transferred:      14847500 bytes                  总数据传输量
    HTML transferred:       14548500 bytes                  HTML数据传输量
    Requests per second:    25.82 [#/sec] (mean)            平均每秒请求数
    Time per request:       1936.210 [ms] (mean)            平均每次并发所有请求时间
    Time per request:       38.724 [ms] (mean, across all concurrent requests)
                                                            平均每次请求时间
    Transfer rate:          374.43 [Kbytes/sec] received    传输速率

    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        2  668 1905.0    135   12237            连接时间
    Processing:     0 1244 1652.3    902   14963            处理时间
    Waiting:        0 1222 1651.1    883   14955            等待时间
    Total:        134 1912 2723.5   1126   15096

    Percentage of the requests served within a certain time (ms)
      50%   1126
      66%   1321
      75%   1369
      80%   1408
      90%   1917
      95%  10122
      98%  13030
      99%  13884
     100%  15096 (longest request)

webbench

它主要测试每秒请求数,同时支持静态、动态和SSL,单例最多可模拟3万并发,适合小型网站的压力测试。

基本用法是:

    $ webbench -c 100 -t 60 http://192.168.1.101/
        -c	并发数
        -t	测试时间

测试结果如下:

    Benchmarking: GET http://192.168.1.101/
    100 clients, running 60 sec.

    Speed=1321 pages/min, 329214 bytes/sec.
    Requests: 1321 susceed, 0 failed.

http_load

http_load可以在 这里 下载。它可以以单一进程运行,还可以测试HTTPS类的网站。

    $ http_load -p 100 -s 60 urls.txt

几个主要的参数是:

  • -p 并发数
  • -s 访问时间
  • -f 总访问次数
  • -r 每秒访问次数

http_load把要测试的URL放在文件里。

测试结果如下:

    1586 fetches, 100 max parallel, 2.32238e+07 bytes, in 60 seconds
    14643 mean bytes/connection
    26.4333 fetches/sec, 387063 bytes/sec
    msecs/connect: 4.47058 mean, 1109.64 max, 0.211 min
    msecs/first-response: 3652.73 mean, 29979.5 max, 234.175 min
    HTTP response codes:
      code 200 -- 1586

Siege

Siege的主站为 http://www.joedog.org/siege-home/ 。它可以根据配置对一个网站做多用户并发访问,并记录每个用户所有请求过程的时间,可重复进行。

Siege需要先生成一个配置文件.siegerc。它的测试URL也是写在一个文件中的,每行一个,从中随机访问。并且会生成一个log文件。

    $ siege -c 100 -r 10 -f urls.txt
        -c	并发数
        -r	重复次数

在终端会输出:

    Transactions:                   1000 hits       总次数
    Availability:                 100.00 %          成功率
    Elapsed time:                  15.77 secs       测试时间
    Data transferred:               0.45 MB         总数据传输量
    Response time:                  0.47 secs       响应时间
    Transaction rate:              63.41 trans/sec  每秒处理次数
    Throughput:                     0.03 MB/sec     每秒数据传输量
    Concurrency:                   29.90            实际最高并发数
    Successful transactions:        1000            成功次数
    Failed transactions:               0            失败次数
    Longest transaction:            8.95            处理的最长时间
    Shortest transaction:           0.04            处理的最短时间

同时,siege.log文件中会记录本次测试的时间等信息。

curl-loader

curl-loader 的特点是它使用了libcurl和openssl的客户端协议栈(更为真实),还支持登录和验证行为。

multi-mechanize

multi-mechanize 是一个Python写的性能测试框架。它可以用Python库中的 urllib 、 httplib 来发起请求,也可以用libcurl来请求。可以和Mechanize集成,因此做单元测试很容易。另外,它还可以用matplotlib将测试结果生成比较直观的图表。

tcpcopy

前面的几种测试工具属于轻量级的,一般都是以单例来模拟多用户并发。 tcpcopy 基于底层应用请求复制,并且具有分布式压力测试的功能(本身有C/S架构),结果和实际数据较为接近,主要用于中大型的压力测试。基于TCP的包均可测试。


原文链接: http://weiguda.com/blog/65/