压力测试工具siege的用法

压力测试工具siege的用法

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

安装 Siege

01
02
03
04
#wgethttp://www.joedog.org/pub/siege/siege-latest.tar.gz
#tar -xzvf siege-latest.tar.gz
#./configure; make
#make install

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次

01
siege -c 200 -r 100 http: //www .google.com

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

01
siege -c 200 -r 100 -f urls.txt

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

01
siege -c 200 -r 100 -f urls.txt -i

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

01
siege -c 200 -r 100 -f urls.txt -i -b

# 指定http请求头 文档类型

01
siege -H "Content-Type:application/json" -c 200 -r 100 -f urls.txt -i -b

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种操作模式:

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

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

  3. 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

在命令行上输入URL时,最好用引号括起来。目前支持httphttps两种协议。没有写明协议,默认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

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) 。有时会超过这个值,例如重定向会算做2hit

Availability

服务器成功处理的socket连接的百分比。这个数字不包含400500级别的错误。

Elapsed time

本次测试所消耗的时间。

Data transferred

传输数据的总和。它包含headercontent,所以数字可能会大于服务端的数字。如果使用[-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 -d55秒内点击率100

Case2 -c200 -d55秒内点击率200

Case3 -c300 -d55秒内点击率300

Case4 -c400 -d55秒内点击率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

备注:我理解为类似于集合点那种同时提交的概念,不知对错。











测试环境设置



SiegeGNU/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

  1. 添加IP别名。例子:

!/bin/sh

fori in `seq 1 254` do

ifconfigeth0:$i 192.168.1.$i;

done

  1. 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文件中设置最大打开文件数,下面是一行提示:

#

添加如下这行。* - nofile 20000

这行设置了每个用户的默认打开文件数为20000注意"nofile"项有两个可能的限制措施。就是项下的hardsoft要使修改过得最大打开文件数生效,必须对这两种限制进行设定。如果使用"-"字符设定,hardsoft设定会同时被设定。硬限制表明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

你可能感兴趣的:(linux,siege,server)