Siege是一个HTTP Web服务器负载测试和基准测试的开源免费的命令行工具。其支持:HTTP、HTTPS、FTP协议,但只能运行在类Unix系统之下(不支持Windows系统)。
相比于ab,siege 的压测更贴近真实用户,因为:
siege单次请求过程中是模拟用户浏览器访问行为,会将结果中涉及的资源链接都进行加载siege可以支持从一堆链接中随机的进行访问
安装
# 1. 下载源码包
cd /tmp && wget -o /tmp/siege-latest.tar.gz http://download.joedog.org/siege/siege-latest.tar.gz
# 2. 解压源码包
tar -zxvf siege-latest.tar.gz
# 3. cd 进入解压目录,配置安装位置
./configure
# 4. 编译安装
make && make install
安装完毕之后,可以使用 siege -V 或 siege -C 验证安装是否成功!

使用说明
siege 的功能定位都很单一-压测页面,用法:siege <options> [url]。

参数
注意:不同版本,参数支持不一样!!!
| 参数 | 作用 |
|---|---|
| -V, –version | 打印版本信息 |
| -h, –help | 打印帮助信息 |
| -C, –config | 打印当前siege配置信息 |
| -v, –verbose | 详细模式-打印详细信息 |
| -q, –quiet | 静默模式-不打印详细信息并抑制输出 |
| -p, –print | 打印模式-打印请求的HTML页面信息 |
| -c, –concurrent=NUM | 设置并发数-默认是每次10个并发 |
| -r, -reps=NUM | 设置请求次数 |
| -t, –time=NUMm | 持续长时间压测(S-秒, M-分, H-小时) |
| -d, –delay=NUM | 在每个请求前随机的延迟指定时间(单位-秒) |
| -b, –benchmark | 请求之间没有延迟 |
| -i, –internet | 模拟用户请求,从-f指定的URLs中随机选择访问一条URL |
| -f, –file=FILE | 指定URLs文件 |
| -R, –rc=FILE | 指定siege的运行配置文件-默认的为$HOME/.siegerc |
| -l, –log[=FILE] | 将统计数据保存到日志文件中(可在.siegerc中自定义日志文件) |
| -m, –mark=”string” | |
| -H, –header=”string” | 设置Request Headers |
| -A, –user-agent=”string” | 设置User-Agent的值 |
| -T, –content-type=”string” | 设置 Content-Type 的值 |
| –json-output | 设置输出结果为 json 格式(注意:该参数会抑制详细模式的输出) |
-f 参数可以指定URLs文件,格式如下:
GET请求-urls.txtserver=172.0.0.1:80 http://${server}/q?k1=v1&k2=v2POST请求server=172.0.0.1:80 http://${server}/q POST k1=v1&k2=v2
使用案例
公司的服务进行了服务器迁移,需要对迁移后的服务器、数据库等进行压测,其步骤如下:
- 从
Nginx的访问日志中拉取一天的数据下来,取出其中的访问URL放到urls.txt中 - 结合
Kibana看板,查看流量高峰时段(由于是国外业务,高峰时段在下午的14:30-17:00之间) - 绑定新机器
hosts,使用siege持续不断对新服务压测
# 单页面压测-对百度首页发起200个并发,100组请求,总共:2万次
siege -c 200 -r 100 https://www.baidu.com
# 每次都随机从urls.txt中列出所有的网址选取一条进行请求
siege -c 200 -r 100 -f urls.txt -i
# 每次都随机从urls.txt中列出所有的网址选取一条进行请求,每次请求之间不需要延迟
siege -c 200 -r 100 -f urls.txt -i -b
结果分析
- transactions - 完成请求总次数
- availability - 请求成功率
- elapsed_time - 整个测试过程使用时间(单位-秒)
- data_transferred - 整个测试过程共传输数据字节大小
- response_time - 响应时间,显示网络连接的速度
- transaction_rate - 平均每秒完成的处理次数
- throughput - 平均每秒传送数据
- concurrency - 实际最高并发连接数
- successful_transactions - 成功处理次数
- tailed_transactions - 失败处理次数
- longest_transaction - 传输消耗最长的时间
- shortest_transaction - 传输消耗最短的时间
遇到的问题
siege-4.0.4以上版本-v详细模式无效
导致该问题的产生是因为json output的值为true(可以通过siege -C 查看当前加载的配置文件所在位置),抑制了详细模式、stdout的其余输出。

siege-4.0.4以上版本记录log日志失败-无法自动创建日志文件
将~/.siege/siege.conf的 show-logfile 配置设置为 false 抑制记录日志文件。如果需要记录日志文件,新版本需要先手动创建日志文件且保证权限无误才可以写入记录日志。
- 修改
siege最大并发数
根据机器的情况,siege默认的并发用户数是 255,由于HTTP是短连接,而机器的端口范围是:0-65535,如果想不限制并发数只需要将~/.siege/siege.conf配置中的limit属性值设置为 65535 即可!
但是,需要注意的是:
siege工具每个并发都启用一个新的线程来执行比较消耗性能,因此设置的该值的时候请根据实际情况设置用户数量-
若
limit设置为65536(即:不限制并发上限),当并发数太高的时候siege很容易将本地机器的端口耗尽,从而影响到其他程序的运行 - 修复
siege报aborted due to excessive socket failure问题(超过了siege的TCP连接数)
与“问题3-最大并发数”一样的原因导致的,只需要将~/.siege/siege.conf配置中的failures属性值设置为 65535 即可!


