Linux下Web压力测试工具

系统服务   tsung   webbench   ab   http_load   siege  
前言

这里列举了常见的压力测试工具
1. webbench
2. http_load
3. siege 支持https
4. db
5. tsung 推荐

一、Webbench
  • 这个使用就最为简单的,比Apache自带的ab压力测试要好使一点
  • 下载
    webbench-1.5.tar.gz
    wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
  • 安装
    tar zxf webbench-1.5.tar.gz && cd webbench-1.5
    make && make install

  • 常用参数
    -t 测试时间
    -c 并发连接数

  • 举个粟子
    模拟1000并发数,测试时间300秒。
    webbench -c 1000 -t 300 http://www.imdst.com


二、Http_load
  • 单一进程运行,以并行复用的方式运行,用以测试web服务器的吞吐量与负载。一般简单的压力测试可以使用它
  • 下载
    http_load-14aug2014.tar.gz
    wget http://www.acme.com/software/http_load/http_load-14aug2014.tar.gz

  • 安装
    tar zxvf http_load-12mar2006.tar.gz && cd http_load-12mar2006
    make && make install

  • 常用参数
    -p 并发访问进程数
    -f 总的访问次数
    -r 每秒的访问频率
    -s 总的访问时间

  • 举个粟子
    http_load -p 100 -f 1000 url.txt
    总访问1000次,并发100
    http_load -r 100 -s 300 url.txt
    持续300秒,每秒100次访问


三、Siege
  • 多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行
  • 下载
    siege-3.1.0.tar.gz
    wget http://download.joedog.org/siege/siege-3.1.0.tar.gz

  • 安装
    tar zxvf siege-3.1.0.tar.gz && cd siege-3.1.0/
    ./configure
    make && make install
    siege.config

  • 常用参数
    -i 多个url,随机访问
    -c 并发用户数
    -r 重复次数
    -t 测试时间
    -l 输出测试日志

  • 举个粟子
    siege -c 200 -t 10 http://www.imdst.com
    并发数200,持续时间10秒。
    siege -c 50 -r 100 http://www.imdst.com
    50个用户(每次并发量,注意不是每秒并发量) 重复100次 共产生 50 * 100 = 5000个请求
    siege -c 50 -r 100 http://www.imdst.com/?name=test
    50个用户 重复100次 发送GET参数
    siege -c 50 -r 100 "http://www.imdst.com POST name=test" 50个用户 重复100次 发送POST参数 (注意引号)

  • 结果说明
Transactions: 30000 hits    //完成30000次处理  
Availability: 100.00 %      //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   //每次传输所花最短时间  

四、ab
  • ApacheBench安装apache后就可以使用,不过测试效果一般
  • 安装
    centos: yum install apr-util
    debian: apt-get install apache2-utils

  • 常用参数
    -n 请求总次数
    -c 并发请求数,不能大于-n

  • 举个粟子
    ab -c 100 -n 1000 http://www.imdst.com
    并行发送100个请求,执行1000次。


五、Tsung
  • 开源的多协议分布式负载测试工具,基于erlang,使用perl+gnuplot生成图表,它能用来压力测试HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP 和 Jabber/XMPP的服务器。它可以分布在多个客户机,并能够模拟成千上万的虚拟用户数并发。
  • 安装
yum -y install erlang perl perl-RRD-Simple.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit  
wget http://tsung.erlang-projects.org/dist/tsung-1.5.1.tar.gz  
tar zxvf tsung-1.5.1.tar.gz  
cd tsung-1.5.1  
./configure 
make && make install  
  • 配置
    在/usr/share/doc/tsung/examples/目录有多个例子供参考,我们这里主要是使用http_simple.xml进行修改。 Tsung默认配置文件路径为:~/.tsung/
mkdir ~/.tsung/  
cp /usr/share/doc/tsung/examples/http_simple.xml ~/.tsung/tsung.xml  
  • 配置文件参考:
<?xml version="1.0"?>  
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">  
<tsung loglevel="debug" version="1.0">

  <!-- Client side setup -->
  <clients>
    <client host="localhost" use_controller_vm="true"/>
  </clients>

  <!-- Server side setup -->
<servers>  
  <server host="xxx.imdst.com" port="8081" type="tcp"></server>
</servers>

  <load>
  <!-- several arrival phases can be set: for each phase, you can set
  the mean inter-arrival time between new clients and the phase
  duration -->
   <arrivalphase phase="1" duration="10" unit="minute">
     <users interarrival="2" unit="second"></users>
   </arrivalphase>
  </load>

 <sessions>
  <session name="http-example" probability="100" type="ts_http">

    <for from="1" to="20000" var="i">
<!--    <request> <http url="/" method="GET" version="1.1"></http> </request>  
    <thinktime value="20" random="true"></thinktime>
-->

      <request> <http url="/" method="POST" version="1.1" contents_from_file="/tmp/myfile"></http> </request>
    </for>
  </session>
 </sessions>
</tsung>  
  • 配置文件说明:
clients   客户端,如果是多台客户端同时压测的话,可以配置多个client的IP地址  
servers   被压测服务器配置,主要是填写IP和端口  
load      配置压测信息,如:10分钟之内,不限制并发用户以每2秒的速度并发请求。  
sessions  被压测服务器的具体配置信息,这个可以指定配置的URL,由于我这里有token等相关的变量,因此需要采用文件的形式,否则会提示配置文件错误。  

更多配置文件参考可以看:官方用户手册

  • 举个粟子
    • 压测
      tsung start
    • 如果你没有在配置文件中写for循环,例如:
    • 就需要使用ctrl+c 来中止压测。
    • 生成图表
      cd /root/.tsung/log/20150717-1020
      /usr/lib/tsung/bin/tsung_stats.pl
    • 然后下载成生的图表graph.html和reports.html,用浏览器打开