Linux压力测试工具—Siege命令
Posted 运维猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux压力测试工具—Siege命令相关的知识,希望对你有一定的参考价值。
1、简介
Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力。可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。siege可以从您选择的预置列表中请求随机的URL。所以siege可用于仿真用户请求负载,而ab则不能。但不要使用siege来执行最高性能基准调校测试,这方面ab就准确很多。
Siege官网:http://www.joedog.org/Siege下载:http://www.joedog.org/pub/siege/siege-latest.tar.gz
2、安装
# 下载
[root@redis-120-20 opt]# git clone https://github.com/JoeDog/siege.git
# yum安装
[root@redis-120-20 opt]# yum install siege
3、Siege命令常用格式
[root@redis-120-20 ~]# man siege
-C,或–config : 在屏幕上打印显示出当前的配置,配置是包括在他的配置文件$HOME/.siegerc中,可以编辑里面的参数,这样每次siege 都会按照它运行.
-v: 运行时能看到详细的运行信息
-cn,或–concurrent=n : 指定并发的用户个数,-c 200指定并发数200。模拟有n个用户在同时访问,n不要设得太大,因为越大,siege 消耗本地机器的资源越多
-i,–internet : 随机访问urls.txt中的url列表项,以此模拟真实的访问情况(随机性),当urls.txt存在是有效。默认为urls.txt列表从上到下来压。
-dn,–delay=n : hit每个url之间的延迟,在0-n之间
-rn,–reps=n : 重复运行测试n次,不能与-t同时存在
-tn,–time=n : 持续时间。即测试持续时间。默认是分钟。例: -t10S,(10秒) -t5M,(5分钟) -t1H,(1小时)
-l: 运行结束,将统计数据保存到日志文件中siege .log,一般位于/usr/local/var/siege .log中,也可在.siegerc中自定义
-RSIEGERC,–rc=SIEGERC : 指定用特定的siege 配置文件来运行,默认的为$HOME/.siegerc
-fFILE, –file=FILE : 指定用特定的urls文件运行siege ,默认为urls.txt,位于siege 安装目录下的etc/urls.txt
-uURL,–url=URL : 测试指定的一个URL,对它进行”siege “,此选项会忽略有关urls文件的设定
-b: 进行压力测试,不进行延时。
-A, --user-agent=“text” : 设置请求的User-Agent
siegerc设定档说明
verbose : 要不要显示过程。
display-id : 显示过程的时候,要不要显示模拟user的id
show-logfile : 跑完之后要不要显示log资讯
logging : 要不要log到档案
logfile : 要log到档案的话,档名是什么
protocol : HTTP通讯协定( HTTP/1.1或HTTP/1.0 两者择一)
connection : keep-alive表示模拟成persistent connection(写close则反之)
concurrent : 模拟有几个user来冲
time : 跑多久之后停止( H=hours, M=minutes, S=seconds)
reps : 每一个concurrent冲几次。
file : 多个目的url情形下的url档案位置。
url : 单一url情形下的指定url
delay : 非benchmakr情况下,每个模拟user随机延迟0到这个数字(单位:秒)。
timeout : socket connection timeout(单位:秒)。
failures : socket失败次数(timeouts, connection failures)到达这个数字就停下来。
internet : 随机从urls.txt抓出url,否则从urls.txt循序。
benchmark : 跑benchmark模式的话,siege将不会在每个connection间delay,适合拿来做load testing.
user-agent : 送出的agent识别
login : WWW-Authenticate login( login =jdfulmer:topsecret:Admin )(非form based)
username,password : 也是login用的(非form based)
Login URL : 每一个模拟user都必须经过的第一个login url( form based)
proxy-host,proxy-port,proxy-login : 使用proxy的话要填这个。(proxy-login: jeff:secret:corporate)
follow-location : redirection support
zero-data-ok : 接不接受zero-length data
chunked : HTTP/1.1需要chunked encoding
4、URL文件格式说明
GET
server=10.100.3.70
http://${server}/pic01/006u6AVDgy1gc9veol6dlj30yi07gdh0.jpg
http://${server}/pic01/0072KB5Gly1gcbveoguy6j30r80pownf.jpg
http://${server}/pic01/0072KB5Gly1gcbveoubj9j30r80q112w.jpg
POST
server=10.100.3.70:8080
http://${server}/uri POST k1=v1&k2=v2
5、用法举例
1.模拟50个用户并发访问百度首页10秒
[root@redis-120-20 ~]# siege -d 10 -c 50 -t 10 https://www.baidu.com/
{"transactions": 75314,
"availability": 100.00,
"elapsed_time": 599.83,
"data_transferred": 921.54,
"response_time": 0.02,
"transaction_rate": 125.56,
"throughput": 1.54,
"concurrency": 2.27,
"successful_transactions": 75315,
"failed_transactions": 0,
"longest_transaction": 1.66,
"shortest_transaction": 0.00
}
2.对URL文件中的地址进行随机100并发的压力测试持续120秒
[root@redis-120-20 ~]# cat url.txt
http://192.168.80.166/01.jpg
http://192.168.80.166/02.jpg
http://192.168.80.166/03.jpg
http://192.168.80.166/04.jpg
http://192.168.80.166/05.jpg
http://192.168.80.166/06.jpg
[root@redis-120-20 ~]# siege -c 100 -b -i -t 120s -f url.txt
3.对post的data进行压测post.url为一行一个data urlencode编码
[root@redis-120-20 ~]# cat post.url
x=%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsK%0ACwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT%2F2wBDAQMEBA
UEBQkFBQkUDQsN
x=%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP%0AERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7%2F2wBDAQUFBQ
cGBw4ICA4eFBEU
# 对post的data进行压测post.url为一行一个data urlencode编码
[root@redis-120-20 ~]# siege -c 100 -b -i -t 120 -H 'Content-Type: application/x-www-form-urlencoded' 'http://10.100.3.50:80 POST < post.url'
4.加一个headers头的 Content-Type:application/json 然后POST发送uncollect.json中的数据
[root@redis-120-20 ~]# vim uncollect.json
{
"token":"c23f5fac69190de92a50973803409811",
"type":0,
"uni_id":"1acbb47a1d4f7b1f29cca86de70c84b4"
}
[root@redis-120-20 ~]# siege -c 10 -r 30 --H "Content-Type:application/json" "http://47.104.18.17:9005/api/v1.0/user/collect?appName=leqv&version=99&build=1.0.0&os=ios&channel=appstore POST < ./uncollect.json"
----------------------------------------------------------------------------------------
Transactions: siege对服务器的访问次数。如果页面发生了redirect,那么siege会将跳转过的请求算成是另一个transaction
Availability: socket连接的成功率。算法是,如果页面发生了timeout,4xx,5xx,那么该请求算是失败请求,成功率就等于(所有请求-失败请求) / 总请求数
Elapsed time: 所有请求耗费的时间
Data transferred: 所有请求传输的数据量,包括请求的headers和content。所以这个数值可能比server端统计的数值要大一点
Response time: 平均响应时间
Transaction rate: Transactions / Elapsed time
Throughput: 每秒平均传输的数据量
Concurrency: 平均并发的请求数
Successful transactions: 所有status code < 400的transactions数量
Failed transactions: 所有status code >=400的transactions数量
Longest transaction: 最耗时的请求时间
Shortest transaction: 最短单个请求时间
6、测试结果解释
Transactions: 30000hits #完成30000次处理
Availability: 100.00 % #成功率
Elapsed time: 68.59 secs #总共使用时间
Data transferred: 817.76 MB #共数据传输 817.76 MB
Response time: 0.04 secs #响应时间,显示网络连接的速度
Transaction rate: 437.38 trans/sec #平均每秒完成 437.38 次处理
Throughput: 11.92 MB/sec #平均每秒传送数据
Concurrency: 17.53 #实际最高并发连接数
Successful transactions: 30000 #成功处理次数
Failed transactions: 0 #失败处理次数
Longest transaction: 3.12 #每次传输所花最长时间
Shortest transaction: 0.00 #每次传输所花最短时间
7、测试报告样例
测试参数测试结果
模拟客户端数持续时间 请求次数成功率平均响应时间 平均速率 实际并发
100 120s 10875100.00% 1.09 secs 91.36 trans/sec 99.22
200 120s 10963100.00% 2.14 secs 92.06 trans/sec 196.67
300 120s 10827100.00% 2.68 secs 90.56 trans/sec 242.58
400 120s 10904100.00% 2.71 secs 91.53 trans/sec 248.19
500 120s 10848100.00% 2.67 secs 90.82 trans/sec 242.25
扫描二维码
获取更多精彩
有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:
扫描二维码
添加私人微信
运维猫博主
点击阅读原文 查看更多精彩内容!!!
以上是关于Linux压力测试工具—Siege命令的主要内容,如果未能解决你的问题,请参考以下文章