文档章节

基于siege的压力测试

kaxifa
 kaxifa
发布于 2017/08/14 16:08
字数 2448
阅读 109
收藏 0

 本文参考自https://www.joedog.org/siege-manual

一、关于siege

siege, 基于HTTP协议的压力测试基础工具,web开发人员可以通过siege测试出他们的代码在因特网上所能承受的最大压力。Siege支持基本的认证、cookies、http、https以及ftp协议。用户可以自定义压力测试的力度。压测的总历时是所有模拟客户端重复请求服务器的次数总和,比如20个并发模拟客户端请求50次,则总共请求服务器1000次。性能报表统计压力测试的总历时、传输的数据量、服务器的响应时间、事务处理率、吞吐量、并发量、成功的请求数;这些统计结果会在压力测试结束的时候给出。Siege有3种模式:回归、互联网模拟、暴力。它可以从配置文件里读取大量的URL并采用增量的形式(回归模式)或者随机的形式(互联网模拟模式)发出请求;或者用户可以简单粗暴地在命令行上敲上单个URL(暴力模式)。

 

二、平台

Siege支持类Unix系统、新版BSD系统,不支持Windows系统。

笔者在本文中使用平台:

# uname -a

Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

 

三、siege的安装

下载  wget http://download.joedog.org/siege/siege-latest.tar.gz

(笔者整理这篇文章的时候最新版本是siege-4.0.2.tar.gz,本文使用该版本)

解压  tar -zxvf siege-latest.tar.gz

cd siege-4.0.2

./configure --prefix=/home/soft/siege --mandir=/home/soft/siege/man --with-ssl=/usr/local/ssl

参数里的相关路径可以自定义

mkdir -p /home/soft/siege/etc

mkidr -p /home/soft/siege/var

make && make install  

 

四、siege 的使用

   启动命令形如 siege <options> 或者 siege <options> [url]

命令支持以下参数:

   1. -V 或者 -version

   打印版本信息

 

  2. -h 或者 -help

  打印帮助信息

 

  3. -C 或者 -config

  打印当前配置信息,它读取./siegerc 文件并且打印该文件的信息。你可以通过编辑/home/soft/siege/etc/siegerc 文件来自定义配置。如果你没有这个文件,你可以执行siege.config命令自行生成一个。

 

  4. -v 或者 -verbose

  输出详细信息。选择该参数后,siege会把事物信息打印到屏幕,包括HTTP协议类型、响应码、请求的页面,类似:HTTP/1.1 200 OK: /cgi-bin/whoohoo.cgi?first=Homer&last=simpson

  在回归模式或互联网模式下请求大量的URL时,这个选项对于图形化压力测试的进度非常有用。

 

  5. -g URL 或者 -get URL

  发送HTTP GET请求。从服务器上获取请求头并且展示这个HTTP事物。对于web应用的调试很有用。

 

  6. -c NUM 或者 -concurrent=NUM

  模拟的并发客户端数量。用户使用这个参数自定义模拟访问服务器的客户端的数量NUM.这个数量只受限于计算机的可用资源,但是实际上几百个模拟客户端相当于很多倍同等数量的真实用户会话。你配置的这个数量代表了你的服务器要处理的事物数量,并不代表当前的并发会话数。另外值得注意的是,真实的用户是会花些时间去阅读他们请求的页面的。

  7. -i 或者 -internet

  这个参数是配合配置文件使用的,配置文件里填写了很多URL。配置了这个参数后,每个模拟客户端每次都会随机在这些URL里选择一个URL请求服务器。如同你无法告诉你的网站用户哪些网页他们可以访问,在互联网模拟模式下,你无法控制siege将请求哪个页面。配置了这个参数后,就无法保证配置文件里的每一个URL都会被请求了。

 

 8. -t NUMm 或者 -time=NUMm

  时间,允许你指定压力测试的运行时间。格式为 “NUMm”, NUM代表数量,m代表时间单位,可以是S(秒)、M(分钟)、H(小时). 比如 5S 代表5秒,10M 代表10分钟,2H 代表2小时。如果要运行压力测试一小时,-t 3600S 、-t 60M、 -t 1H 都是可以的。S、M、H不区分大小写。 官网说不能有空格,必须是-t3600S,但是经过我实际测试,有空格的-t 3600S 也是可以的。

 

 9. -f FILE 或者 -file=FILE

  默认配置文件是SIEGE_HOME/etc/urls.txt,里面包含了你所有的URL。你可以使用这个参数指定你自己的配置文件。

 

  10. -l 或者 -log

  该参数指定siege把统计结果记录到SIGE_HOME/var/siege.log中。每一个新的统计结果集都会被追加到日志文件后面。

 

   11. -m MESSAGE或者 -mark=MESSAGE

  该配置允许你用分隔符标记日志文件,你的日志文件在头信息上将会有所区别。没有必要同时使用-m和-l参数,因为-m参数是假定-l参数了的,所以它标记并且记录事物。如果MESSAGE里含有空格,请使用引号。

 

   12. -d NUM 或者 -delay=NUM

   Siege模拟的每个客户端将会随机延迟1到NUM秒。如果你是做基准性能测试,推荐你使用延迟1秒(-d1). 默认值3秒。这个参数使得所有的请求错开,而不是像浪一样冲击服务器。

 

  13. 配置文件

  从2.00版本开始,siege支持配置文件,你可以在这个配置文件里记录你的所有命令参数。如此,启动siege将会变得更加容易,并且还可以确保在一系列的启动中每一次启动都是使用的确切的一样的配置。那么它在哪里呢?配置文件名是.siegerc,他在SIEGE_HOME/etc/siegerc,如果你没有这个文件,可以使用siege.config命令生成该文件,该命令会在HOME目录生成一个模板文件。你再用文本编辑器编辑它即可。

     

   14. URL格式

  Siege能识别的URL格式:[protocol://][servername.domain.xxx][:portnumber][/directory/file]

  目前,siege只支持http和https协议,默认http. Siege允许你偷懒,你可以只写servername. 于是假如你跟名为shemp的服务器在同一个域下,并且shemp配置在了你的hots文件里或者在DNS里,那么,siege -u shemp 将会请求 http://shemp.yourdomain.net/index.shtml(假设该服务器有index页面)。如果你想测试https服务器,就需要指定协议了。siege -u https://shemp 将会请求https://shemp.yourdomain.net/index.shtml

 

   15. URL文件

   为了运行回归模式的测试或者模拟有效的互联网模式,你将不得不运行所有的URL。为了完成这个,可以把所有的URL填写到配置文件里。默认的文件是SIEGE_HOME/etc/urls.txt.该文件里,每个URL占一行。

 # comments behind hashes

http://homer.whoohoo.com/index.shtml

http://homer.whoohoo.com/howto.jsp

http://homer.whoohoo.com/cgi-bin/hello.pl?first=bart&last=simpson

# and on and on....

Siege-2.06以后,支持POST和GET两种请求方式。上述示例演示了GET请求的URL书写方式。但是POST方式需要指定POST关键字:

http://homer.whoohoo.com/cgi-bin/hello.pl POST name=homer

http://homer.whoohoo.com/haha.jsp POST word=doh!&scope=ALL

当使用siege并且未指定URL参数[-u URL | -url=URL]时,siege在文件里寻找URL。将它们读进内存然后请求这些URL。通常siege从文件起始位置开始顺序执行。如果你指定了参数 -i,那么它将会随机选择URL. 使用 -f FILE 参数可以指定自定义的配置文件。

 

  16. 变量

  从2.57版本开始,在.siegerc 和urls.txt 文件里,siege支持变量的声明和赋值。Siege使用变量的语法类似UNIX 的shell脚本。变量的定义形如 varname=value, 占一行。 使用$(varname)或者${varname}获取变量的值。

 

  17. 日志文件

   指定-l参数后,siege会把事物日志记录到SIEGE_HOME/var/siege.log。日志文件能让你处理历史记录。为了按照URL、server、协议等进行分组,-m “message” 需要被指定。这将把”message”标记到日志文件上。

 

  18. 性能统计

  性能统计包括压力测试的历时、传输的数据量、服务器的响应时间、事物处理率、吞吐量、并发量、请求成功的数量。这些量化的指标将在每一次运行结束后给出。

Ben: $ siege -u shemp.whoohoo.com/Admin.jsp -d1 -r10 -c25

..Siege 2.65 2006/05/11 23:42:16

..Preparing 25 concurrent users for battle.

The server is now under siege...done

Transactions: 250 hits

Elapsed time: 14.67 secs

Data transferred: 448000 bytes

Response time: 0.43 secs

Transaction rate: 17.04 trans/sec

Throughput: 30538.51 bytes/sec

Concurrency: 7.38

Status code 200: 250

Successful transactions: 250

Failed transactions: 0

Transactions是请求服务器的数量。25个模拟客户端,每个请求服务器10次,总共请求250次。

Elapsed time 是整个压力测试的历时时间。这个是从运行开始到结束的时间。示例中,整个压力测试使用了14.67秒。

Data transferred 所有模拟客户端传输的数据量,包含请求头和请求体。因为包含请求头,所以这个数量会比服务器给出的数量要偏大。在互联网模式下,每次压力测试的这个数量将会不同。

Response time 服务器的平均响应时间。

Transaction rate 服务器平均每秒能处理的事物数量,即Transactions/Elapsed time

Throughput 服务器平均每秒传输给所有客户端的比特数。

Concurrency 同时连接的平均数,该参数随着服务器性能的降低而升高。

Successful transaction 服务器响应码小于400的次数。重定向被认为是成功的请求。

 

 

 

 

© 著作权归作者所有

kaxifa
粉丝 0
博文 5
码字总数 7681
作品 0
海淀
后端工程师
私信 提问
Siege:压力模拟/测试工具

下载: wget ftp://sid.joedog.org/pub/siege/siege-latest.tar.gz 安装: %./configure ; make #make install siege包含了一组压力测试工具: SIEGE (1) Siege是一个HTTP压力测试和评测工具...

oschina
2008/09/15
3.7K
1
Siege 2.72b1 发布,修复一个13年的bug

Siege 2.72b1 发布,该版本修复了一个存在了 13 年的 bug,另外 Siege 可使用 $sysconfir/urls.txt 作为默认的 urls.txt 文件。 Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在...

红薯
2012/02/12
549
2
Siege 2.53b4 发布,Web 压力评测工具

Siege 2.53b4 发布,该版本修复了某些平台下无法使用 Ctrl+C 来终止 Siege 的问题。 Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB...

oschina
2012/07/31
655
0
Siege 3.0 正式版发布,压力测试工具

Siege 3.0 正式版发布了,这是十年来 Siege 首个主要的版本发布,该版本最主要的是增加附加协议的支持,包括对 FTP 的支持。 Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压...

oschina
2013/04/10
1K
2
Siege 2.72 发布,Web 压力评测工具

Siege 2.72 发布了,该版本修复了一个存在了 13 年的 bug,另外当不提供 -f file 参数时,siege 将自动在 $sysconfdir 目录下找 urls.txt 文件进行读取。 Siege是一个压力测试和评测工具,设...

红薯
2012/02/17
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

非webpack require.js + vue + vueRouter + iView 实现按需加载

适合一个人开发的时候,在整个php框架下,又想单页,又可以直接后端assign变量穿透到模板。又不想写接口搞前后分离脚手架一大堆npm 包, 在php模板下 引入require.js <!DOCTYPE html><html...

一箭落旄头
18分钟前
6
0
新特性解读 | MySQL 8.0 窗口函数详解

原创作者: 杨涛涛 背景 一直以来,MySQL 只有针对聚合函数的汇总类功能,比如MAX, AVG 等,没有从 SQL 层针对聚合类每组展开处理的功能。不过 MySQL 开放了 UDF 接口,可以用 C 来自己写UDF...

爱可生
24分钟前
3
0
23.5 jumpserver介绍

23.5 jumpserver介绍 开源堡垒机jumpserver介绍: 官网www.jumpserver.org Jumpserver是一款使用Python, Django开发的开源跳板机系统, 助力互联网企业高效 用户、资产、权限、审计 管理 Auth...

oschina130111
30分钟前
3
0
Spring Cloud 入门教程(七): 消息总线(Spring Cloud Bus)(Greenwich.RELEASE)

参考网址:https://blog.csdn.net/forezp/article/details/81041062,由于此文中作者基于git和rabbitMq,为了适应内网我改造为基于mysql和kafka 一、准备工作 1、安装kafka 参考这个:kafka...

pipi1919
31分钟前
1
0
用人工智能改变企业与客户的连接方式

  随着以AI人工智能技术为主的新一代信息技术的快速商业化落地,我国的数字经济正高歌猛进。2017年我国数字经济对GDP的贡献率为55%,接近甚至超越了某些发达国家水平,2018年我国数字经济规...

琴殇的
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部