一、Siege
Siege(英文意思是围攻)是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。
最早使用的压力测试工具是apache的ab(apache benchmark) ,apache ab做重复压力测试不错,但是每次只能测试一个链接,如何测试一组链接(比如从日志中导出的1个小时的日志,做真实压力测试),后来找到了这个:
Siege 是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。
下载/安装
Siege时一个开放源代码项目:http://www.joedog.org
下载:wget http://download.joedog.org/siege/siege-latest.tar.gz
安装:
tar -zxf siege-latest.tar.gz
cd siege-3.0.6
./configure --prefix=/usr/local/siege-3.0.6
make && make install
cp /usr/local/siege-3.0.6/bin/siege /usr/local/bin/;
cp /usr/local/siege-3.0.6/bin/bombardment /usr/local/bin/;
cp /usr/local/siege-3.0.6/bin/siege2csv.pl /usr/local/bin/
siege包含了一组压力测试工具:
SIEGE (1) Siege是一个HTTP压力测试和评测工具.
使用样例:
任务列表:www.test.com.url文件
http://www.test.com/info.php
http://www.test.com/logo.png
.......
siege -c 200 -r 2 -f www.test.com.url
参数说明:
-c 200 并发200个用户
-r 2 重复循环2次
-f www.test.com.url 任务列表:URL列表
”-C,或�Cconfig”
在屏幕上打印显示出当前的配置,配置是包括在他的配置文件$HOME/.siegerc中,可以编辑里面的参数,这样每次siege 都会按照它运行.
”-v” 运行时能看到详细的运行信息
”-c n,或�Cconcurrent=n” 模拟有n个用户在同时访问,n不要设得太大,因为越大,siege 消耗本地机器的资源越多
”-i,�Cinternet” 随机访问urls.txt中的url列表项,以此模拟真实的访问情况(随机性),当urls.txt存在是有效
”-d n,�Cdelay=n” hit每个url之间的延迟,在0-n之间
-r n,�Creps=n 重复运行测试n次,不能与 -t同时存在
-t n,�Ctime=n 持续运行siege ‘n’秒(如10S),分钟(10M),小时(10H)
-l 运行结束,将统计数据保存到日志文件中siege .log,一般位于/usr/local/var/siege .log中,也可在.siegerc中自定义
-R SIEGERC,�Crc=SIEGERC 指定用特定的siege 配置文件来运行,默认的为$HOME/.siegerc
-f FILE, �Cfile=FILE 指定用特定的urls文件运行siege ,默认为urls.txt,位于siege 安装目录下的etc/urls.txt
-u URL,�Curl=URL 测试指定的一个URL,对它进行”siege “,此选项会忽略有关urls文件的设定
urls.txt文件:
是很多行待测试URL的列表以换行符断开,格式为:
[protocol://]host.domain.com[:port][path/to/file]
输出样例:
ransactions: 400 hits 完成400次处理
Availability: 100.00 % 成功率
Elapsed time: 2.11 secs 总共用时
Data transferred: 0.01 MB 共数据传输:0.01MB
Response time: 0.02 secs 响应时间
Transaction rate: 189.57 trans/sec 每秒传输189.57次
Throughput: 0.00 MB/sec 数据吞吐量每秒0.00MB
Concurrency: 3.65 实际并发访问
Successful transactions: 400 成功处理次数
Failed transactions: 0 失败处理次数
Longest transaction: 0.07 每次传输所花最长时间
Shortest transaction: 0.00 每次传输所花最短时间
注意:由于速度很快,可能会达不到并发速度很高就已经完成。Response time显示的是测试机器和被测试服务器之间网络链接状况。Transaction rate则表示服务器端任务处理的完成速度。
辅助工具:
增量压力测试:
为了方便增量压力测试,siege还包含了一些辅助工具:
bombardment (1)
是一个辅助工具:用于按照增量用户压力测试:
使用样例:
bombardment urlfile.txt 5 3 4 1
初始化URL列表:urlfile.txt
初始化为:5个用户
每次增加:3个用户
运行:4次
每个客户端之间的延迟为:1秒
输出成CSV格式:
siege2csv.pl (1)
siege2csv.pl将bombardment的输出变成CSV格式:
Time Data Transferred Response Time Transaction Rate Throughput Concurrency Code 200 (note that this is horribly broken.)
242 60.22 603064 0.02 4.02 10014.35 0.08
605 59.98 1507660 0.01 10.09 25136.05 0.12
938 59.98 2337496 0.02 15.64 38971.26 0.26
-----------------------------------------------------------------
二、httperf + autobench 压力测试
安装httperf:
wget http://httperf.googlecode.com/files/httperf-0.9.0.tar.gz
cd /opt
tar zxvf httperf-0.9.tar.gz
cd httperf-0.9
./configure --prefix=/usr/local/httperf-0.9.0
make && make install
安装autobench包:
# yum install gd gnuplot pcre pcre-devel texinfo -y
#wget http://www.xenoclast.org/autobench/downloads/autobench-2.1.2.tar.gz
# tar zxvf autobench-2.1.2.tar.gz -C /usr/local/
# cd /usr/local/autobench-2.1.2
# make && make install
#sed -i 's/postscript color/png xffffff/g' /usr/local/bin/bench2graph (修改bench2graph脚本,否则生成的图像背景有问题)
autobench --single_host --host1 www.testweb.com --uri1 /phpinfo.php --port1 80 --quiet --low_rate 20 --high_rate 200 --rate_step 20 --num_call 1 --num_conn 500 --timeout 5 --file results.tsv
生成输出图形
/usr/local/bin/bench2graph /tmp/result.tsv /opt/result.png
这个图没有曲线?感觉不对换成网上显示成功的gnuplot-4.2.0
解压 tar xvzf gnuplot-4.2.0.tar.gz
cd gnuplot-4.2.0
生成Makefile ./configure
编译 make
安装 make install
cp /usr/local/bin/bench2graph /usr/local/bin/bench2png
sed -i 's/postscript color/png xffffff/g' /usr/local/bin/bench2png
注意这里一定要打开echo set data style linespoints >> gnuplot.cmd
/usr/local/bin/bench2graph /tmp/result.tsv /opt/result.png
其中常用的参数的含义
--server S web服务器地址
--num-conns N 测试联接数
--num-calls N 每连接中发起联接数,一般是1
--rate N 每秒请求数
--port N 测试端口
??method S 测试HTTP方法,默认为GET
--uri S 测试网页,默认为/
--timeout N 等待服务器响应时间
其参数含义
--signle_host 只测单机
--host1 测试主机地址
--uri1 host1 测试URI
--quiet 安静模式
--low_rate 测试时最低请求数(指 httperf)
--hight_rate 测试时最高请求数
--rate_step 每次测试请求数增加步长
--num-call 同httperf
--num_conn 同httperf
--file 测试结果输出的 tsv文件
--------------------------------------------
三、Webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。
1、适用系统:Linux
2、编译安装:
引用
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
3、使用:
引用
webbench -c 500 -t 30 http://192.168.2.4/test.jpg
参数说明:-c表示并发数,-t表示时间(秒)
4、测试结果示例:
引用
Webbench �C Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://192.168.2.4/test.jpg
500 clients, running 30 sec.
Speed=16310 pages/min, 79422 bytes/sec.
Requests: 8155 susceed, 0 failed
---------------------------------------------
四 apache下的ab测试
[root@mail bin]# ./ab -c 1000 -n 1000 http://kyouwar.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking kyouwar.com (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
Completed 1000 requests
Finished 1000 requests
Server Software: nginx
Server Hostname: kyouwar.com
Server Port: 80
Document Path: /
Document Length: 166 bytes
Concurrency Level: 1000
Time taken for tests: 48.042 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 311000 bytes
HTML transferred: 166000 bytes
Requests per second: 20.82 [#/sec] (mean) 每秒可完成多少请求
Time per request: 48041.946 [ms] (mean)
Time per request: 48.042 [ms] (mean, across all concurrent requests)
Transfer rate: 6.32 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 19 32 7.1 33 45
Processing: 21159 22606 1783.8 21195 48009
Waiting: 21149 22603 1785.8 21194 48009
Total: 21201 22638 1787.5 21215 48036
Percentage of the requests served within a certain time (ms)
50% 21215
66% 24053
75% 24058
80% 24062
90% 24068
95% 24070
98% 24072
99% 24073
100% 48036 (longest request)
----------------------------------------------------
五、压力测试工具 http_load
程序非常小,解压后也不到100K
http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工
具,它可以以一个单一的进程运行,一般不会把客户机搞死。还可以测试HTTPS类的网站请求。
下载地址:http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz
安装很简单
#tar zxvf http_load-12mar2006.tar.gz
#cd http_load-12mar2006
#make && make install
命令格式:http_load -p 并发访问进程数 -s 访问时间 需要访问的URL文件
参数其实可以自由组合,参数之间的选择并没有什么限制。比如你写成http_load -parallel 5 -seconds
300 urls.txt也是可以的。我们把参数给大家简单说明一下。
-parallel 简写-p :含义是并发的用户进程数。
-fetches 简写-f :含义是总计的访问次数
-rate 简写-p :含义是每秒的访问频率
-seconds简写-s :含义是总计的访问时间
准备URL文件:urllist.txt,文件格式是每行一个URL,URL最好超过50-100个测试效果比较好.文件格式
如下:
http://www.vpser.net/uncategorized/choose-vps.html
http://www.vpser.net/vps-cp/hypervm-tutorial.html
http://www.vpser.net/coupons/diavps-april-coupons.html
http://www.vpser.net/security/vps-backup-web-mysql.html
例如:
http_load -p 30 -s 60 urllist.txt
参数了解了,我们来看运行一条命令来看看它的返回结果
命令:% ./http_load -rate 5 -seconds 10 urls说明执行了一个持续时间10秒的测试,每秒的频率为5。
49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds5916 mean bytes/connection4.89274
fetches/sec, 28945.5 bytes/secmsecs/connect: 28.8932 mean, 44.243 max, 24.488 minmsecs/first
-response: 63.5362 mean, 81.624 max, 57.803 minHTTP 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 这个选项,即服务器每秒能够响应的查询次数,
用这个指标来衡量性能。似乎比 apache的ab准确率要高一些,也更有说服力一些。
Qpt-每秒响应用户数和response time,每连接响应用户时间。
测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的
cpu、men进行分析,才能得出结论