标签: ab

linux实用命令详解(二)—siege

web开发免不了性能测试,经常需要模拟高并发的场景,siege和apache ab都是不错的选择,siege可以从你选择的预置列表中请求随机的URL。所以siege可用于仿真用户请求负载,而ab则不能。但不要使用siege来执行最高性能基准调校测试,这方面ab就准确很多。siege看名字就很霸气,暴力群殴,哥喜欢。

Siege是Linux系统下的一个测试工具,完全使用C语言实现,可以对HTTP和FTP服务器进行负载和性能测试。设计用于评估WEB应用在压力下的承受能力。可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。

用法举例

1.模拟500个用户,重复50次请求

siege -c 500 -r 50 -f url.txt

说明:-c是并发量,-r是重复次数。url.txt就是一个文本文件,每行都是一个url,它会从里面随机访问的。

url.txt内容: http://baidu.com/

2.模拟500个用户连续请求10分钟

siege -c 500 -t10M -u http://baidu.com

表示对http://baidu.com/这个站点使用500个用户并发访问,持续10分钟进行测试,注意:”-t10M”之间没有空格

3.Siege来重现对一台服务器的日志记录

[bash]$ cut -d ‘ ‘ -f7 /logs/access.log > urls.txt
$ siege -c 1 -b -f urls.txt[/bash]

结果说明

** SIEGE 2.70
** Preparing 10 concurrent users for battle.
The server is now under siege.. .

Transactions: 200 hits //完成200次处理
Availability: 100.00 % //100.00 % 成功率
Elapsed time: 16.24 secs //总共使用16.24s
Data transferred: 2.03 MB //共数据传输 2.03 MB
Response time: 0.01 secs //响应时间,显示网络连接的速度
Transaction rate: 12.32 trans/sec //平均每秒完成 12.32次处理,也就是QPS
Throughput: 0.12 MB/sec //平均每秒传送数据
Concurrency: 0.13 //实际最高并发连接数
Successful transactions: 200 //成功处理次数
Failed transactions: 0 //失败处理次数
Longest transaction: 0.03 //请求响应最长时间
Shortest transaction: 0.00 //请求响应最短时间

参数详解

-C,或–config 在屏幕上打印显示出当前的配置,配置是包括在他的配置文件$HOME/.siegerc中,可以编辑里面的参数,这样每次siege 都会按照它运行.
-v 运行时能看到详细的运行信息
-c n,或–concurrent=n 模拟有n个用户在同时访问,n不要设得太大,因为越大,siege 消耗本地机器的资源越多
-i,–internet 随机访问urls.txt中的url列表项,以此模拟真实的访问情况(随机性),当urls.txt存在是有效
-d n,–delay=n hit每个url之间的延迟,在0-n之间
-r n,–reps=n 重复运行测试n次,不能与 -t同时存在
-t n,–time=n 持续运行siege ‘n’秒(如10S),分钟(10M),小时(10H)
-l 运行结束,将统计数据保存到日志文件中siege .log,一般位于/usr/local/var/siege .log中,也可在.siegerc中自定义
-R SIEGERC,–rc=SIEGERC 指定用特定的siege 配置文件来运行,默认的为$HOME/.siegerc
-f FILE, –file=FILE 指定用特定的urls文件运行siege ,默认为urls.txt,位于siege 安装目录下的etc/urls.txt
-u URL,–url=URL 测试指定的一个URL,对它进行”siege “,此选项会忽略有关urls文件的设定

urls.txt文件:是很多行待测试URL的列表以换行符断开,格式为:
[protocol://]host.domain.com[:port][path/to/file]

apache AB测试

ab是apache附带的一个命令行工具,可以让你对服务器做非常基本的性能测试。

执行命令:ab -n 10 -c 10 -T “application/x-www-form-urlencoded” -p post.txt http://localhost:8080/ClusterService/queryInterface
命令的意思:向http://localhost:8080/ClusterService/queryInterface发送10个请求(-n 10) ,并每次发送10个请求(-c 10),也就是说一次性发送10个请求

=========================测试报告=========================
#并发级别 10
Concurrency Level: 10
#测试耗费的时间
Time taken for tests: 2.750000 seconds
#完成的请求数
Complete requests: 10
#失败的请求数
Failed requests: 0
#写入错误数
Write errors: 0
#总发送字节数
Total transferred: 137380 bytes
#html内容传输量
HTML transferred: 135970 bytes
#注重的指标之一,相当于LR中的每秒事物数(每秒处理请求数),后面括号中的mean是一个平均值
Requests per second: 3.64 [#/sec] (mean)
#注重的指标之二,相当于LR中的平均事物相应时间,mean表示的是一个平均值
Time per request: 2750.000 [ms] (mean)
#所有并发请求的平均时间
Time per request: 275.000 [ms] (mean, across all concurrent requests)
#平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Transfer rate: 48.73 [Kbytes/sec] received
0.87 kb/s sent
49.65 kb/s total

#连接时间:网络上消耗的时间分解
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 4.8 0 15
Processing: 2562 2643 59.2 2687 2734
Waiting: 2562 2641 61.4 2687 2734
Total: 2562 2644 58.5 2687 2734

#在一定时间内送达时间的百分比;在发送中每个请求都有一个响应时间,50%的用户小于2687毫秒
Percentage of the requests served within a certain time (ms)
50% 2687
66% 2687
75% 2687
80% 2687
90% 2734
95% 2734
98% 2734
99% 2734
100% 2734 (longest request)

#每次请求程序耗时(改结果依赖于线程调度,理论时间介于单次请求时间和10*单次请求时间)
总耗时:953ms
总耗时:1157ms
总耗时:1516ms
总耗时:1750ms
总耗时:1813ms
总耗时:2125ms
总耗时:2203ms
总耗时:2235ms
总耗时:2437ms
总耗时:2578ms

#第二次执行
Thread[http-8080-11,5,main]总耗时:1031ms
Thread[http-8080-3,5,main]总耗时:1313ms
Thread[http-8080-10,5,main]总耗时:1484ms
Thread[http-8080-8,5,main]总耗时:1625ms
Thread[http-8080-4,5,main]总耗时:1891ms
Thread[http-8080-7,5,main]总耗时:1969ms
Thread[http-8080-1,5,main]总耗时:2234ms
Thread[http-8080-9,5,main]总耗时:2328ms
Thread[http-8080-6,5,main]总耗时:2391ms
Thread[http-8080-2,5,main]总耗时:2531ms