Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1044409
  • 博文数量: 157
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1388
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-09 15:37
文章分类

全部博文(157)

文章存档

2023年(9)

2022年(2)

2021年(18)

2020年(7)

2017年(13)

2016年(53)

2015年(55)

我的朋友

分类: 服务器与存储

2015-06-24 17:47:47

测试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两个参数必须有一个,用于指定程序的终止条件。
阅读(1010) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~