压测工具siege和wrk

siege压测工具

安装:

wget http://download.joedog.org/siege/siege-3.0.8.tar.gz

cd siege-3.0.8

./configure

make

make install

验证安装结果:输入siege -V 如果输出了版本号就代表安装没问题

Siege命令常用参数

-c 200 指定并发数200
-r 5 指定测试的次数5
-f urls.txt 制定url的文件
-i internet系统,随机发送url
-b 请求无需等待 delay=0
-t 5 持续测试5分钟

测试指标说明:

Transactions: 4 hits 完成4次处理 
Availability: 100.00 % 成功率 
Elapsed time: 1.19 secs 总共用时
Data transferred: 0.03MB 共数据传输:0.03MB
Response time: 0.13 secs 相应用时0.13秒,显示网络连接的速度
Transaction rate: 3.36 trans/sec平均每秒完成3.36次处理,表示服务器后台处理的速度
Throughput: 0.03MB/sec 平均每秒传送数据:0.03MB
Concurrency: 0.45 最高并发数 0.45
Successful transactions: 4成功处理次数
Failed transactions: 0 失败处理次数
Longest  transaction:0.25请求最长响应时间/每次传输所花最长时间
Shortest  transaction:0.09请求最短响应时间/每次传输所花最短时间

测试背景 服务器32U apache部署的django服务

siege -c32 -t10s -v -b 127.0.0.1::8000

HTTP/1.1 200 0.89 secs: 1 bytes ==> GET /test/
[error] socket: -222533888 address is unavailable.: Cannot assign requested address

Transactions: 29390 hits
Availability: 96.59 %
Elapsed time: 4.68 secs
Data transferred: 0.03 MB
Response time: 0.00 secs
Transaction rate: 6279.91 trans/sec
Throughput: 0.01 MB/sec
Concurrency: 14.81
Successful transactions: 29390
Failed transactions: 1039
Longest transaction: 0.89
Shortest transaction: 0.00

我们看会出现error,而且并发数也少的可怜为啥呢?因为siege不能建立长连接,顾名思义就是每发一次tcp请求就会close掉,不能连续发1000个在close,这样服务器会down掉

我们现在用wrk来试试

git clone https://github.com/wg/wrk.git  

cd wrk  

make  

参数说明:

-c,——连接:保持打开的HTTP连接的总数每个线程处理N =连接/线程

-d,——持续时间:试验持续时间,如2s, 2m, 2h

-t,——线程:要使用的线程总数脚本:LuaJIT脚本,参见脚本

header:添加到请求中的HTTP头文件,例如:“用户代理:wrk”

——latency:打印详细的延迟统计信息

——timeout:如果内部没有接收到响应,则记录一个超时这段时间。

./wrk -t30 -c1000 -d30s 127.0.0.1:8000

压测结果

Running 30s test @ 127.0.0.1:8000
30 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 49.08ms 125.03ms 1.94s 91.46%
Req/Sec 764.47 495.39 8.32k 70.24%
666327 requests in 30.10s, 174.87MB read
Socket errors: connect 0, read 88, write 0, timeout 119
Requests/sec: 22137.51
Transfer/sec: 5.81MB

由此可见并发数为两万多,因为wrk他是支持长连接的。

上一篇:[转]过XX游戏驱动保护的代码


下一篇:和团队齐头并进——敏捷软件开发的Scrum的学习