测试ats服务器,一直在测试它的一些插件的功能,没怎么测试过性能,最近感觉性能测试很重要想给补上,但真正要测试性能了才发现脑子一片空白。看了网上性能测试的介绍,看是看了看完就忘了,今天研究了下性能测试工具,siege、webbench、ab、http_load,进行了简单的比较,希望大家一起讨论,共同进步。
1. siege (纯c编写web压测工具)
特点:
由多线程实现的同步压测工具, 实现的是模拟n个用户不停的访问某个url的场景
多线程并发,比多进程在系统开销上好很多
支持到时停止和到量停止两种压测方法(-t,-r)
支持同时压测多个随机选取的url
支持ftp,http,https
要想支持https,安装时需要 ./configure --prefix=/usr/local/siege3.0.9 --with-ssl=/usr/include/openssl
可以发送GET、POST、HEAD等多种请求
可以设置鉴权、cookies
可兼容不同平台
缺点
对于压力控制并不够准确, 只能粗略根据并发用户数去控制一下压力大小
不能实现指定的时间段发送请求,如1s发1000个请求,控制0-1ms发一个请求
测试时间的控制并不准确
由于多线程实现,一个进程可开启的线程数量本身有限, 并且线程过多下cpu在线程间切换也是一笔不小开销,十分影响效率
因此siege使用时注意开启的并发用户数不能太多
参数描述:
-V --version 打印版本信息
|
|
|
|
|
|
|
|
-h --help 打印帮助信息
|
|
|
|
|
|
|
|
-v --verbose 在测试过程中输出更多的通知信息
|
|
|
|
|
|
-C --config 打印当前的配置信息(siege有一个名为.siegerc的配置文件)
|
|
|
-q --quite 此选项会覆盖掉--verbose,是安静模式,在测试中减少信息输出
|
|
|
-g --get 显示http头信息,适用于debug
|
|
|
|
|
|
|
-c --concurrent 最为常用的参数,每次测试必设置,并发数量,例 -c10代表10个并发
|
|
-i --internet 随机点击URL,在同时测试多个URL时可以使用,模拟用户随机访问的情形
|
|
-b --benchmark 每个请求之间没有延时,也是很常用的设置
|
|
|
|
|
-t --time 非常常用的参数,设置测试的时间,默认以分钟为单位,其他单位要自己设置,例如 -t10s,测试持续10秒
|
-r --reps 非常常用的参数,指定了测试几个回合结束,本参数和-t都可用来设置测试结束条件。
|
-f --file 指定一个存放URL链接的文件。siege支持随机访问多个url,因此这些url链接在文件中提供,较为常用。
|
-l --log 指定log文件,如果没有指定的话siege也有默认文件保存位置,文件名siege.log
|
|
-d --delay 指定时间延迟,在每个请求发出后,再随机延迟一段时间再发下一个
|
|
|
-H --header 指定http请求头部的一些内容
|
|
|
|
|
|
-A --user-agent 指定http请求中user-agent字段内容
|
|
|
|
|
-T --content-type 指定http请求中的content-type字段内容
|
|
|
|
|
2. webbench (纯c编写网站压测工具)
缺点
不支持POST方法
不支持异步压测
不支持https请求
特点
多进程并发
linux本身有对普通用户的最大进程数的限制 ulimit -u
限制程序可以fork的进程数,只对普通用户有效(max user processes),需要修改,否则普通用户发请求失败给提示,root用户则不受影响
这个值针对所有用户,表示可以在进程中打开的文件数ulimit -n.(open files),可不进行修改
通过ulimit比较直接,但只在当前的session有效,limits.conf中可以根据用户和限制项使用户在下次登录中生效.
默认请求方式为GET,也支持HEAD、OPTIONS、TRACE
支持HTTP0.9,HTTP1.0,HTTP1.1三个版本
参数描述:
[root@CentOS179min webbench-1.5]# ./webbench -help
|
webbench [option]... URL
|
|
|
|
|
|
|
|
-f|--force Don't wait for reply from server.
|
|
|
|
-r|--reload Send reload request - Pragma: no-cache.
|
|
|
-t|--time Run benchmark for seconds. Default 30.
|
|
|
-p|--proxy Use proxy server for request.
|
|
|
|
-c|--clients Run HTTP clients at once. Default one.
|
|
|
-9|--http09 Use HTTP/0.9 style requests.
|
|
|
|
-1|--http10 Use HTTP/1.0 protocol.
|
|
|
|
|
-2|--http11 Use HTTP/1.1 protocol.
|
|
|
|
|
--get Use GET request method.
|
|
|
|
|
--head Use HEAD request method.
|
|
|
|
|
--options Use OPTIONS request method.
|
|
|
|
--trace Use TRACE request method.
|
|
|
|
|
-?|-h|--help This information.
|
|
|
|
|
|
-V|--version Display program version.
|
|
|
|
|
3. ab
创建并发访问线程
安装apache时会在bin下自动装上ab,如果不装apache可直接安装apache的工具包httpd-tools
没怎么用过,希望大家补充
参数描述:
-n在测试会话中所执行的请求个数。默认时,仅执行一个请求。
|
|
|
|
|
-c一次产生的请求个数。默认是一次一个。
|
|
|
|
|
|
|
-t测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
|
-p包含了需要POST的数据的文件。
|
|
|
|
|
|
|
-P对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
|
-T POST数据所使用的Content-type头信息。
|
|
|
|
|
|
-v设置显示信息的详细程度-4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。
|
-V显示版本号并退出。
|
|
|
|
|
|
|
|
-w以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
|
|
|
-i执行HEAD请求,而不是GET。
|
|
|
|
|
|
|
|
-x设置属性的字符串。
|
|
|
|
|
|
|
-X对请求使用代理服务器。
|
|
|
|
|
|
|
|
-y设置 | 属性的字符串。
|
|
|
|
|
|
|
-z设置 | 属性的字符串。
|
|
|
|
|
|
|
|
-C对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。
|
|
-H对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")。
|
-A对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
|
-h显示使用方法。
|
|
|
|
|
|
|
|
|
-d不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
|
|
|
-e产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
|
-g把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
|
-i执行HEAD请求,而不是GET。
|
|
|
|
|
|
|
|
-k启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
|
-q如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
|
4. http_load
http_load采用单一进程并行复用方式发包,只有一个进程
针对每秒流量数据,http_load在统计时剔除了http报文的头部(head),而webbench是没有剔除头部的,所以webbench的值>http_load的值
参数支持每秒访问的次数(即访问频率),控制性能测试的速度。webbench不行
支持https请求,请求的url放在一个文件中,类似siege的urls.txt,随机访问
没怎么用过,希望大家补充
参数描述:
-fetches:总计要访问url的次数,无论成功失败都记为一次,到达数量后程序退出。
|
|
|
-rate:每秒访问的次数(即访问频率),控制性能测试的速度。
|
|
|
|
-seconds:工具运行的时间,到达seconds设置的时间后程序退出。
|
|
|
|
-parallel:最大并发访问的数目,控制性能测试的速度。
|
|
|
|
|
-verbose:使用该选项后,每60秒会在屏幕上打印一次当前测试的进度信息。
|
|
|
-jitter:该选项必须与-rate同时使用,表示实际的访问频率会在rate设置的值上下随机波动10%的幅度。
|
-checksum:由于要访问某个url很多次,为了保证每次访问时收到的服务器回包内容都一样,可以采用checksum检查,不一致会在屏幕上输出错误信息。
|
-cipher:使用SSL层的时候会用到此参数(url是https开头),使用特定的密码集。
|
|
|
-timeout:设置超时时间,以秒为单位,默认为60秒。每超过一次则记为一次超时的连接
|
|
-proxy:设置web代理,格式为-proxy host:port
|
|
|
|
|
|
-throttle:限流模式,限制每秒收到的数据量,单位bytes/sec。该模式下默认限制为3360bytes/sec。
|
-sip:指定一个source ip文件,该文件每一行都是ip+port的形式。
|
|
|
|
需要特别说明的是,-parallel参数和-rate参数中必须有一个,用于指定发请求包的方式;-fetches和-seconds两个参数必须有一个,用于指定程序的终止条件。
|
阅读(2411) | 评论(0) | 转发(0) |
|