注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

三种压力测试工具 http_load 和 apache ab 、 siege 压力测试、PHP性能测试工具(转)  

2011-04-26 13:33:00|  分类: Web技术-Servers |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
apache ab压力测试
以前安装好APACHE总是不知道该如何测试APACHE的性能,现在总算找到一个测试工具了。

就是APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下。

 

格式: ./ab [options] [http://]hostname[:port]/path
参数:
    -n requests     Number of requests to perform
    //在测试会话中所执行的请求个数。默认时,仅执 行一个请求
 
    -c concurrency Number of multiple requests to make
    //一次产生的请求个数。默认是一次一个
 
    -t timelimit    Seconds to max. wait for responses
    //测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。
      默认时,没有时间限制。

    -p postfile     File containing data to POST
    //包含了需要POST的数 据的文件.
 
    -T content-type Content-type header for POSTing
    //POST数据所使用的Content-type头信息。

    -v verbosity    How much troubleshooting info to print
    //设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等),
      2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。

    -w              Print out results in HTML tables
    //以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表

    -i              Use HEAD instead of GET
   // 执行HEAD请求,而不是GET。
 
    -x attributes   String to insert as table attributes
    //
    -y attributes   String to insert as tr attributes
    //
    -z attributes   String to insert as td or th attributes
    //
    -C attribute    Add cookie, eg. 'Apache=1234. (repeatable)
    //-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。
 
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
    -A attribute    Add Basic WWW Authentication, the attributes
                    are a colon separated username and password.
    -P attribute    Add Basic Proxy Authentication, the attributes
                    are a colon separated username and password.
    //-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,
     并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
 
    -X proxy:port   Proxyserver and port number to use
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -d              Do not show percentiles served table.
    -S              Do not show confidence estimators and warnings.
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -h              Display usage information (this message)
    //-attributes 设置属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外,
    对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。
    它没有完整地实现 HTTP/1.x; 仅接受某些'预想'的响应格式。 strstr(3)的频繁使用可能会带来性能问题,
    即你可能是在测试ab而不是服务器的性能。


参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:

./ab -c 1000 -n 1000 http://127.0.0.1/index.php

这个表示同时处理1000个请求并运行1000次index.php文件.
#/usr/local/xiaobai/apache2054/bin/ab -c 1000 -n 1000 http://127.0.0.1/index.html.zh-cn.gb2312
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests


Server Software:        Apache/2.0.54
// 平台apache 版本2.0.54

Server Hostname:        127.0.0.1
//服务器主机名

Server Port:            80
//服务器端口

Document Path:          /index.html.zh-cn.gb2312
//测试的页面文档

Document Length:        1018 bytes
//文档大小

Concurrency Level:      1000
//并发数

Time taken for tests:   8.188731 seconds
//整个测试持续的时间

Complete requests:      1000
//完成的请求数量

Failed requests:        0
//失败的请求数量
 
Write errors:           0

Total transferred:      1361581 bytes
//整个场景中的网络传输量
 
HTML transferred:       1055666 bytes
//整个场景中的HTML内容传输量

Requests per second:    122.12 [#/sec] (mean)
//大家最关心的指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值
 
Time per request:       8188.731 [ms] (mean)
//大家最关心的指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值

Time per request:       8.189 [ms] (mean, across all concurrent requests)
//每个请求实际运行时间的平均值
 
Transfer rate:          162.30 [Kbytes/sec] received
//平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

Connection Times (ms)
              min mean[+/-sd] median   max
Connect:        4 646 1078.7     89    3291
Processing:   165 992 493.1    938    4712
Waiting:      118 934 480.6    882    4554
Total:        813 1638 1338.9   1093    7785
//网络上消耗的时间的分解,各项数据的具体算法还不是很清楚

Percentage of the requests served within a certain time (ms)
50%   1093
66%   1247
75%   1373
80%   1493
90%   4061
95%   4398
98%   5608
99%   7368
100%   7785 (longest request)
//整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于1093 毫秒,
  60%的用户响应时间小于1247 毫秒,最大的响应时间小于7785 毫秒

由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,
所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数


http_load压力测试

到http://www.acme.com/software/http_load/ 下载http_load ,安装也很简单直接make;make instlall 就行。


http_load 的标准的两个例子是:
http_load -parallel 5 -fetches 1000 urls.txt  
http_load -rate 2 -seconds 300 urls.txt  

例子只是个参考,参数其实可以自由组合,参数之间的选择并没有什么限制。

比如你写成http_load -parallel 5 -seconds 300 urls.txt 也是可以的。
我们把参数给大家简单说明一下。

-parallel 简写 -p : 含义是并发的用 户进程数。

-fetches 简写 -f : 含义是总计的访 问次数

-rate    简写 -p : 含义是每秒的访 问频率

-seconds 简写 -s : 含义是总计的访问 时间

urls.txt 是一个url 列表,每个url 单独的一行。当然也可以直接跟一个url 而不是url 列表文件。

实例:
http_load -rate 5 -seconds 10 urls  49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds  5916 mean bytes/connection  

4.89274 fetches/sec, 28945.5 bytes/sec  msecs/connect: 28.8932 mean, 44.243 max, 24.488 min  msecs/first-response: 63.5362

mean, 81.624 max, 57.803 min  HTTP response codes:    code 200 -- 49
 
分析:
1.49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds

说明在上面的测试中运行了49个请求,最大的并发进程数是2,总计传输的数据是289884bytes,

运行的时间是10.0148秒

2.5916 mean bytes/connection
说明每一连接平均传输的数据量289884/49=5916

3.4.89274 fetches/sec, 28945.5 bytes/sec
说明每秒的响应请求为4.89274,每秒传递的数据为28945.5 bytes/sec

4.msecs/connect: 28.8932 mean, 44.243 max, 24.488 min
说明每连接的平均响应时间是28.8932 msecs,最大的响应时间44.243 msecs,最小的响应时间24.488 msecs

5.msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min

6、HTTP response codes: code 200 -- 49
说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈。

特殊说明:这里,我们一般会关注到的指标是fetches/sec、msecs/connect

他们分别对应的常用性能指标参数Qpt-每秒响应用户数和response time,每连接响应用户时间。

测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的cpu、men进行分析,
才能得出结论

Sample run:


% ./http_load -rate 5 -seconds 10 urls

49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds

5916 mean bytes/connection

4.89274 fetches/sec, 28945.5 bytes/sec

msecs/connect: 28.8932 mean, 44.243 max, 24.488 min

msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min

HTTP response codes:

code 200 -- 49

4.89274 fetches/sec 这个值得就是说服务器每秒能够响应的查询次数为4.8左右
这个值得是根据 49 fetches /
10.0148 seconds 秒计算出来的

测试网站每秒所能承受的平均访问量

http_load -parallel 5 -fetches 1000 urls.txt

这段命令行是同时使用5个进程,随机访问urls.txt中的网址列表,总共访问1000次。运行之后的结果:

1000 fetches, 5 max parallel, 6e+06 bytes, in 58.1026 seconds
6000 mean bytes/connection
17.2109 fetches/sec , 103266 bytes/sec
msecs/connect: 0.403263 mean, 68.603 max, 0.194 min
msecs/first-response: 284.133 mean, 5410.13 max, 55.735 min
HTTP response codes:
code 200 — 1000

从上面的运行结果来看,目标网站仅仅能够承受每秒17次访问,不够强壮。
测试网站是否能承受住预期的访问压力

http_load -rate 2 -seconds 300 urls.txt

在300秒内保持一定的频率访问目标url。


如 果你需要测试https,你必须将 Makefile中
# CONFIGURE: If you want to compile in support for https, uncomment these
# definitions.  You will need to have already built OpenSSL, available at
# http://www.openssl.org/  Make sure the SSL_TREE definition points to the
# tree with your OpenSSL installation - depending on how you installed it,
# it may be in /usr/local instead of /usr/local/ssl.
SSL_TREE =    /usr
SSL_DEFS =    -DUSE_SSL
SSL_INC =    -I$(SSL_TREE)/include
SSL_LIBS =    -L$(SSL_TREE)/lib -lssl -lcrypto

由于使用到openssl,你必须安装openssl和相应的开发环境

apt-get install openssl
apt-get install libssl-dev

find -name ssl.h
/usr /include/openssl/ssl.h

所 以上面红色字体部分必须修改
http_load常见问题
平常使用http_load过程中的一些总结,分享出来,大家可以一起补充;

1.提示:bytes count wrong
如果httpd_load获取到的页面数据和上次不一致则会报错byte count wrong
如果是动态页面,此报错可以忽略;

2.报错:too many open files
系统限制的open files太小,ulimit -n 修改open files值即可;

3.无法发送大请求 (请求长度>600个字符)
默认接受请求的buf大小 http_load.c

912 static void
913 handle_connect( int cnum, struct timeval* nowP, int double_check )
914 {
915 int url_num;
916 char buf[600]; //根据需要修改,如:char buf[4096]
917 int bytes, r;

重新编译即可得到可发送大请求

4.Cannot assign requested address
客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定

端口,所以 要改客户端机器的配置,
在sysctl.conf里加:

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_timestamps=1 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置
不起作用

net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT sockets的快速回收


siege压力测试

1)、简介
     一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过
     程的相应时间,并在一定数量的并发访问下重复进行。

2)、获取
      http://www.joedog.org/

3)、安装
     [root@localhost software]# tar -zxvf siege-2.69.tar.gz   #解压
     [root@localhost software]# cd siege-2.69
     [root@localhost siege-2.69]# ./configure --prefix=/usr/local/siege #配置安装目录
     [root@localhost siege-2.69]# make && make install    #编译安装
    
     注意:安装是会提示一下错误,
     make[3]: Entering directory `/usr/local/software/siege-2.69/doc'
     /usr/bin/install: cannot create regular file `/usr/local/siege/etc/siegerc': No such file or
     directory
     make[3]: *** [install-exec-hook] Error 1
     make[3]: Leaving directory `/usr/local/software/siege-2.69/doc'
     make[2]: *** [install-exec-am] Error 2
     make[2]: Leaving directory `/usr/local/software/siege-2.69/doc'
     make[1]: *** [install-am] Error 2
     make[1]: Leaving directory `/usr/local/software/siege-2.69/doc'
     make: *** [install-recursive] Error 1
     解决办法是:mkdir -p /usr/local/siege/etc/siegerc 建立这样一个目录就可以继续向下安装的。
    
     
4)、 使用
     命令格式:siege -c 并发量 -r 重复次数 -f urllist文件
     urllist格式:
     http://www.taoav.com
     http://www.tuhaoduo.com
     http://www.tiaonv.com
     结果说明:
     Lifting the server siege… done.
     Transactions: 3419263 hits //完成419263次处理
     Availability: 100.00 % //100.00 % 成功率
     Elapsed time: 5999.69 secs //总共用时
     Data transferred: 84273.91 MB //共数据传输84273.91 MB
     Response time: 0.37 secs //相应用时1.65秒:显示网络连接的速度
     Transaction rate: 569.91 trans/sec //均每秒完成 569.91 次处理:表示服务器后
     Throughput: 14.05 MB/sec //平均每秒传送数据
     Concurrency: 213.42 //实际最高并发数
     Successful transactions: 2564081 //成功处理次数
     Failed transactions: 11 //失败处理次数
     Longest transaction: 29.04 //每次传输所花最长时间
     Shortest transaction: 0.00 //每次传输所花最短时间

另注以上信息转至:http://blog.csdn.net/lyflower/archive/2010/09/09/5873544.aspx

PHP性能测试工具
XHProf   参考:http://www.cnblogs.com/bluefrog/archive/2012/03/01/2374922.html

编译安装

复制代码
wget http://pecl.php.net/get/xhprof-0.9.2.tgz

tar zxf xhprof-0.9.2.tgz

cd xhprof
-0.9.2/extension/

sudo phpize
.
/configure --with-php-config=/usr/local/php/bin/php-config
sudo make
sudo make install
复制代码

配置 php.ini

在php.ini里加入

复制代码
[xhprof]
extension
=xhprof.so;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class)
for storing
; XHProf runs.
;
;xhprof.output_dir
=<directory_for_storing_xhprof_runs>
xhprof.output_dir
=/tmp/xhprof
复制代码

注:如果是64位系统需要将xhprof.so文件拷贝到相关的lib64的目录下

 

将代码加入到要测试的php当中

复制代码
 1 <?pho
2 // cpu:XHPROF_FLAGS_CPU 内存:XHPROF_FLAGS_MEMORY
3 // 如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
4 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
5
6 // 要测试的php代码
7
8
9 $data = xhprof_disable(); //返回运行数据
10
11 // xhprof_lib在下载的包里存在这个目录,记得将目录包含到运行的php代码中
12 include_once "xhprof_lib/utils/xhprof_lib.php";
13 include_once "xhprof_lib/utils/xhprof_runs.php";
14
15 $objXhprofRun = new XHProfRuns_Default();
16
17 // 第一个参数j是xhprof_disable()函数返回的运行信息
18 // 第二个参数是自定义的命名空间字符串(任意字符串),
19 // 返回运行ID,用这个ID查看相关的运行结果
20 $run_id = $objXhprofRun->save_run($data, "xhprof");
21 var_dump($run_id);
复制代码

 

查看运行结果

复制代码
将xhprof_lib&&xhprof_html相关目录copy到可以访问到的地址
访问 xxx
/xhprof_html/index.php?run=$run_id&source=bluefrog 就可经看到你的php代码运行的相关情况

下面是一些参数说明
Inclusive Time 包括子函数所有执行时间。
Exclusive Time
/Self Time 函数执行本身花费的时间,不包括子树执行时间。
Wall Time 花去了的时间或挂钟时间。
CPU Time 用户耗的时间
+内核耗的时间
Inclusive CPU 包括子函数一起所占用的CPU
Exclusive CPU 函数自身所占用的CPU
复制代码

注: 需要使用ctype这个扩展


  评论这张
 
阅读(795)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017