您的位置:首页 > 其它

压力测试工具siege的用法

2014-10-31 14:31 483 查看


压力测试工具siege的用法

Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试。


安装 Siege


Siege命令常用参数

-c 200 指定并发数200

-r 5 指定测试的次数5

-f urls.txt 制定url的文件

-i internet系统,随机发送url

-b 请求无需等待 delay=0

-t 5 持续测试5分钟

# -r和-t一般不同时使用


常用的siege命令举例

# 200个并发对http://www.google.com发送请求100次

# 在urls.txt中列出所有的网址

# 随机选取urls.txt中列出所有的网址

# delay=0,更准确的压力测试,而不是功能测试

# 指定http请求头 文档类型


Siege输出结果说明

Transactions: 总共测试次数

Availability: 成功次数百分比

Elapsed time: 总共耗时多少秒

Data transferred: 总共数据传输

Response time: 等到响应耗时

Transaction rate: 平均每秒处理请求数

Throughput: 吞吐率

Concurrency: 最高并发

Successful transactions: 成功的请求数

Failed transactions: 失败的请求数


Siege使用的一些总结

1,发送post请求时,url格式为:http://www.xxxx.com/ POST p1=v1&p2=v2

2,如果url中含有空格和中文,要先进行url编码,否则siege发送的请求url不准确

添加

siege -C 可以查看相关的配置参数,可以自行修改,比如是否显示log,超时时间

SIEGE

官方网站http://www.joedog.org/

概述

Siege是一个多线程http负载测试和基准测试工具。它有3种操作模式:

Regression(when invoked by bombardment)Siege从配置文件中读取URLs,按递归方式,逐个发送请求

Internetsimulation (Siege从配置文件中读取URLs,随机选取URL发送请求)

Bruteforce (在命令行上写上一个单独的URL,发送请求)

安装

$wget http://www.joedog.org/pub/siege/siege-2.70.tar.gz $tar zxvf siege-2.70.tar.gz
$./configure
$make
$sudo make install

调用

Siege以命令行方式使用,调用格式如下:

siege[options]

siege[options] [url]

siege-g [url]

Siege的选项说明:
-V , --version
打印siege的版本信息

-h , --help
打印帮助信息

-C , --config
打印当前配置。这个选项读取.siegerc并打印。你可以通过编辑$HOME/.siegerc修改配置。如果没有这个文件,你可以运行siege.config(/usr/local/bin/siege.config
)来生成此文件。

-v , --verbose

打印详细信息。包含请求的协议、响应码、请求的URL

-gURL , --get URL

获得一个HTTP事务。导出headers和显示HTTP交易。对于debug有所帮助。

-cNUM , --concurrent=NUM

并发用户数(必需参数)。

-i , --internet

此选项配合URLs的配置文件使用。每个虚拟用户每次请求的URL是随机从配置文件的获取。

-tNUMm , --time=NUMm

设置测试运行的时间。单位S\M\H代表秒\分\时。单位大小写不敏感。数字和单位之间不要有空格。

-fFILE , --file=FILE

被测试的URLs配置文件。默认$SIEGE_HOME/etc/urls.txt

-l , --log

记录统计信息到$SIEGE_HOME/var/siege.log

-m MESSAGE , --mark=MESSAGE
此选项允许你使用分隔符标记日志文件。没必要与'-l'同时使用。

-dNUM , --delay=NUM

TimeDELAY, random delay before each requst between 1 and NUM. (NOTCOUNTED IN STATS)

-b , --benchmark
BENCHMARK, runs the test with NO DELAY for throughput benchmarking.负载测试时不推荐使用。

-H HEADER , --header=HEADER
HEADER,
该选项允许你添加额外的头信息。

R SIEGERC , --rc=SIEGERC
设置运行参数配置文件。默认
$HOME/.siegerc

-A "User Agent" ,--user-agent="User Agent"
AGENT,
定制客户端信息。

URL格式

支持的格式:
[protocol://]host.domain.xxx [:port] [/path/file]
host.domain.xxx/filePOST field=value&field2=value2
host/file POST</home/jeff/haha.txt
在命令行上输入URL时,最好用引号括起来。目前支持http和https两种协议。没有写明协议,默认http
当一次测试中需要多个URL时,可以将URLs放到一个单独的文件中。默认$SIEGE_HOME/etc/urls.txt
例如:urls.txt
#
这里表述注释,一行一个URL http://homer.whoohoo.com/index.html http://homer.whoohoo.com/howto.jsp http://go.whoohoo.com/cgi-bin/q.cgi?scope=a http://go.whoohoo.com/cgi-bin/q.cgiPOST scope=a http://homer.whoohoo.com/my.jspPOST a=1&b=2
# POST文件
www.haha.com/aha.jspPOST </home/jeff/my.txt
www.haha.com/parser.jspPOST <./my.txt

Siege一次性将文件读入内存,按照文件中顺序发送请求。[-i]选项可以随机发送URL请求。

在文件中,我们可以设置和引用变量。先定义后引用原则。一个变量一行,类似于shell变量,引用时用$()或者${},如
HOST =homer.whoohoo.com http://${HOST}/index.html 如果变量不存在,则表示空字符串。

测试报告

测试结果会打印在屏幕上,格式如下
** Siege 2.70
** Preparing100 concurrent users for battle.
Theserver is now under siege...done
Transactions: 339 hits
Availability: 93.39 %
Elapsedtime: 67.47 secs
Datatransferred: 4273708 bytes
Responsetime: 8.25 secs
Transactionrate: 5.02 trans/sec
Throughput: 63342.34 bytes/sec
Concurrency: 41.47
Successfultransactions: 337
Failedtransactions: 26
Longesttransaction: 17.77 secs
Shortesttransaction: 0.37 secs

各项含义说明:
Transactions
The number ofserver hits.一般等于num1*
num2 (-c num1 -r num2) 。有时会超过这个值,例如重定向会算做2次hit。
Availability
服务器成功处理的socket连接的百分比。这个数字不包含400和500级别的错误。
Elapsed time
本次测试所消耗的时间。
Data transferred
传输数据的总和。它包含header和content,所以数字可能会大于服务端的数字。如果使用[-i]选项,因为每次请求的URL是从urls.txt中随机选取的,所以这个值每次运行都会不同。
Response time
平均响应时间。
Transaction rate
这个就是TPS。
Throughput
从server到模拟用户的每秒传输数据量[bytes],即吞吐率。
Concurrency
同时连接数平均值。该值的上升伴随着服务器性能的下降。
Successful transactions
服务器响应code<400的请求次数。
Failed transactions
服务器响应code>=400,加上处理失败的socket连接(包含timeout)的数量。

测试举例
测试数值设计,设计测试场景时,最好根据实际情况分析线上日志得出需要的测试标准。webalizer这是一个免费得日志分析工具,也可以自己编写脚本分析。
Case1 -c100 -d5
(5秒内点击率100)
Case2 -c200 -d5
(5秒内点击率200)
Case3 -c300 -d5
(5秒内点击率300)
Case4 -c400 -d5
(5秒内点击率400)
Case5 -c100 -d1 (5秒内点击率500,这里与上面设置方法稍有区别)

平均响应时间(Y--秒
X--百Vusers)

TPS(Y--TPS X--百Vusers)

求教:Concurrency(这个是我目前没搞明白的,网上那些人也没弄明白,所有人都翻译为并发用户数,然而-cnum中的参数也是翻译也并发用户数,那这两个怎么区别了)
concurrency
case编号
1.9
1
3.27
2
5.73
3
7.98
4
8.92
5
备注:我理解为类似于集合点那种同时提交的概念,不知对错。

测试环境设置

Siege在GNU/Linuxkernel 2.6.x
上运行可能会僵死,原因可能与NPTL有关。解决方式可以设置LD_ASSUME_KERNEL=2.4.1,运行方式如下
$ LD_ASSUME_KERNEL=2.4.1 siege -c20 -r 100 -f urls.txt

Siege支持Netscapecookie
,但不支持RFC2965 cookies.

在同一台机器上实现多IP测试(来自RobertHartman

添加IP别名。例子:

!/bin/sh
fori in `seq 1 254` do

ifconfigeth0:$i 192.168.1.$i;
done

ReverseNAT with iptables.例如

iptables-t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.1.1-192.168.1.254
NOTES:This method can be used for Class B address spaces as well withproper masking on the eth0 interface. Robert tested this to work with2500+ IPs on
a single ethernet card. You can contact Robert viaemail: "robert at roberthartman dot net"

系统优化设置
sysctl-w net.ipv4.tcp_tw_reuse=1表示开启重用,允许将TIME-WAITSockets重新用于新的TCP连接,默认为0,表示关闭。
sysctl-w net.ipv4.tcp_tw_recycle=1表示开启TCP连接中TIME-WAITSockets的快速回收,默认为0,表示关闭。
sysctl-w net.ipv4.tcp_fin_timeout=30参数tcp_fin_timeout是套接字关闭时,保持FIN-WAIT-2状态的时间。
ulimit-n查看单个进程可以openfiles的数量。修改方式:
1.按照最大打开文件数量的需求设置系统,并且通过检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。
#cat /proc/sys/fs/file-max
如果设置值太小,修改文件/etc/sysctl.conf的变量到合适的值。这样会在每次重启之后生效。如果设置值够大,跳过下步。
#echo 20000 > /proc/sys/fs/file-max
编辑文件/etc/sysctl.conf,插入下行。
fs.file-max= 20000
2.在/etc/security/limits.conf文件中设置最大打开文件数,下面是一行提示:

#<domain> <type> <item> <value>
添加如下这行。
* - nofile 20000
这行设置了每个用户的默认打开文件数为20000。注意"nofile"项有两个可能的限制措施。就是<type>项下的hard和soft。要使修改过得最大打开文件数生效,必须对这两种限制进行设定。如果使用"-"字符设定<type>,则hard和soft设定会同时被设定。硬限制表明soft限制中所能设定的最大值。soft限制指的是当前系统生效的设置值。hard限制值可以被普通用户降低。但是不能增加。soft限制不能设置的比hard限制更高。只有root用户才能够增加hard限制值。

备注

有时我们会遇到-c1000以上出现timeout(排除server端原因),这可能是siege引起的,单个进程所启动的线程数限制。可以使用shell调用方式,多进程运行。
#!/bin/sh
if[ "$1" == "-h" ] || [ "$1" == "--help"] ;then
echo"benchmarktest.sh [process num=3] [url] [request num=300][time=30s]";
exit1;
fi
iftest $1 ; then
num=$1;
else
num=3;
fi
iftest $2 ; then
url=$2;
else
url="http://www.baidu.com";
fi
iftest $3 ; then
re=$3;
else
re=300;
fi
iftest $4 ; then
time=$4;
else
time="30s";
fi
for((i=1; i<=$num; i=i+1))
do
#echo$num;
`nohup/home/space/yingfm/siege/bin/siege -c $re -t $time $url >/dev/null &`;
echo$i;
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: