引言

自己因为工作的需要,需要测试服务器的并发连接量,之前就比较单纯的使用wget,写一个脚本,开几个terminal同时跑,向服务器发GET,结果服务器估计是撑不住压力,前面还能返回200,后来都只能返回503了。没办法,光看为什么会产生503错误都在server端和client各种读日志,还是没解决问题。
然后开例会Shane推荐了二个工具seige和curl-loader。

过程

本着实用的原则,都看了一下,发现seige略简单,curl-loader带GUI界面,然后用apt-get install一下,repo里没有curl-loader,但有seige。凭借着杰出的懒人天赋,直接一个命令下载来seige:

sudo apt-get install seige

然后就可以使用了,官网是http://www.joedog.org/siege-home/,打开速度比较慢,manual可以在http://linux.die.net/man/1/siege找到。虽然英文看起来无压力,但是肯定中文看起来比较快,记的也牢,所以用中文再写一下。

使用方法基本上就是 seige [option] [url],有一些例外情况,分别是seige [option] 和 seige -g [url]

seige参数描述

seige的选项

option比较常用的有-V, -h, -f, -g, -c, -t, -r, -l.下面一一给出解释:

-V,alias是–version,很明显是提供版本信息的。

-h,等效于–help,就是提供命令说明的,这些基本是命令行工具通用的选项。

-f FILE指定了urls.txt文件的路径,一般而言需要访问多个URL的时候启用这个选项,将url放入对应的文件中并在使用seige时指定,就可以使用了,用了这个选项之后,一般的使用形式便不带有[url],而必须使用seige [option]形式的命令。

-g 指定了获取http的头部并且显示整个连接过程,其作用类似于ping。

-c 指定了模拟的并发用户数量,后面跟数字表示用户数量。 eg. –c 20指定了20个并发用户,–concurrent=20起的作用是相同的。

-t 指定了连续不断的发请求所持续的时间,可选择的单位有S,M,H,分别对应秒,分,时。 eg –t 20M 指定了连续请求20分钟。–time=20M的作用相同。

-r 指定了请求的重复次数,这个对于按次数统计的压力测试最为方便。eg. –r 20指定了20次请求,–reps=20实现相同的功能,在配合-f使用时 有个特殊的选项为-reps=once,表示对urls.txt中每一个URL请求一次,从头顺序到尾,到尾部就结束测试并打印出报告。

-l 指定了测试时log文件的输出。 eg. –l ./test1.log 指定了当前文件夹下test1.log为输出的日志文件,等效的命令是–log=./test1.log。(注:到目前为止,-l没作用,只能使用–log)

url的介绍

介绍完了option, 再描述下[url]:

其一般格式是:[protocol://] host.domain.xxx [:port] [/path/file]

也可以是:host.domain.xxx/file POST field=value&field2=value2

第一个形式是GET,第二个形式是POST,同样也可以使用重定向符将文件作为POST的参数,其形式为:host/file POST </home/jeff/haha.txt

所以用起来很简单,如果需要对一个server做一个并发量20持续5分钟的测试,那么命令如下:

seige –c 20 –t 5M http://server.com 

简单易用啊,如果是要限定次数,那么-r 2000表示2000次请求,记得-r -t最好不要混用,-t优先级比-r要高,混用就没法达到原有目的了。

输出报告

附上输出的报告(从man page上复制的,自己跑的不好拷出来):

** Siege 2.60
** Preparing 100 concurrent users for battle.
The server is now under siege…done
Transactions: 339 hits
Availability: 93.39 %
Elapsed time: 67.47 secs
Data transferred: 4273708 bytes
Response time: 8.25 secs
Transaction rate: 5.02 trans/sec
Throughput: 63342.34 bytes/sec
Concurrency: 41.47
Successful transactions: 337
Failed transactions: 26
Longest transaction: 17.77 secs
Shortest transaction: 0.37 secs

每个输出项的含义:

Transactions: 表示总共多少个请求

Availability: 成功的连接数所占的百分比

Elapsed time: 表示持续的时间,如果-t指定了时间,这个多半是差不多的,误差个几秒。

Data transferred: 总共传输了多少字节的数据。

Respond time: 平均响应时间

Transaction rate:  服务器能承受的每秒连接数

Throughput: 吞吐量,服务器每秒传输的字节数

Concurrency: 并发连接数

Successful transactions: 总共成功的事务

Failed transactions: 总共失败的事务

Longest transaction: 事务最长耗时时间

Shortest transaction: 事务最短耗时时间

完工

简单易懂,尤其是中文,看起来比英文快多了,自己参考了。