(1) Tsung的每一个虚拟用户就是一个erlang的轻量进程。这点和loadrunner有很大的区别。
(2) 虚拟用户完成session后就消失。
(3) 大量的虚拟用户(erlang轻量进程)建立在erlangVM上。
(4) 一台测试机可以启多个erlangVM,目前按照1个cpu启动1个erlangVM。
分布式部署Tsung在运行时,会产生ssl_esock、beam、beam.smp3种进程,ssl-esock是erlangVM用的port程序, 协助完成ssh功能;beam是单处理器版本的erlangVM;beam.smp就是control程序,负责协调系统的运作。
#####################################################################3
最近用上了 Tsung ,传说中“压垮了N台服务器”的 Erlang 压力测试工具啊。在这里记一下流水帐。
安装
获取tsung 的源码
或
svn co http://svn.process-one.net/tsung/trunk
确保依赖关系
tsung 依赖了这些东西 erlang(废话,从源码编译 erlang 写的程序,能不装么) gnuplot perl5(如果想看 report 中的图形,就要装这个),将其一一装上。
编译安装
make
sudo make install
安装完成之后的 tsung 运行脚本在 /usr/bin/tsung ,在系统 path 之中,可以直接运行。
设置
从 /usr/share/doc/tsung/examples 中挑一两个例子拷贝到 ~/.tsung/tsung.xml 作为配置文件。我只需要 http 测试,所以:
tsung 采用了巧妙的 proxy 方式来“录制”测试脚本。具体来说,就是建立一个本机的 http proxy 默认使用 8090 端口,在配好 firefox 使用 localhost 8090 作为代理之后(推荐 foxyproxy 插件),所有“流经”这个 proxy 的 http 动作都会被记录下来,测试时可以“回放”这些步骤来产生请求。
tsung stop_recorder
“录制”完了,会得到一个 ~/.tsung/tsung_recorderXXXXXXXXXX.xml 文件,这就是测试时回回放的脚本。
将这个脚本加到 tsung.xml 之中
就像这样
<! ENTITY mysession1 SYSTEM " /home/yourname/.tsung/tsung_recorderXXXXXXXXXX.xml " >
]>
...
< sessions >
&mysession1;
</ sessions >
对配置稍作调整
< monitor host = " localhost " type = " erlang " ></ monitor >
</ monitoring >
<!-- 需要配置到 localhost 无须密码的 ssh 登录(ssh via rsa_key),开启了这个配置可以,获得目标机器的 cpu 和 ram 消耗情况 -->
< load >
< arrivalphase phase = " 1 " duration = " 1 " unit = " minute " >
< users interarrival = " 2 " unit = " second " ></ users >
</ arrivalphase >
</ load >
<!-- 第1阶段1分钟(你可以自己多搞几个阶段),其中每2秒新建一个用户,每个用户都会完整执行 session 的测试脚本,最高并发约为 30 个,个人认为这个“逐渐加压”的方法比 ab xxxx 的“突然加压”要慢一些,但更科学一点 -->
运行
准备好了,加压运行。
运行完,在 ~/.tsung/log 目录会生成一个以时间命名的目录,进入这个目录
/usr/lib/tsung/bin/tsung_stats.pl
生成 html 的压力测试报告
慢慢欣赏吧。
除了 http 以外 tsung 还可以压很多东西,比如:jabber, postgreSQL 【传说:MYSQL比较粗放】还可以写插件来给任何你想要测试的东西加压,配置文件也很“丰富多彩”,更多的内容情看文档。
进入测试日志的路径,如/home/iamlaobie/.tsung/log/20110528-21:07,运行上面的脚本,运行完成之后,在该路径下生成report.html,如果在linux上不方便查看,可将该路径打包下载本地用浏览器打开report.html查看。
报告中的几个相似概念:
request:类似用php函数file_get_contents请求一个url地址的相应时间
page:一组没有间隔的request请求的时间总和,相当于打开一个页面,除了加载页面的html外,还要加载img、css、js等
session:一个用户从第一个请求开始到最后一个请求结束的时间总和
5、其他
5.1、tsung-recorder,通过它可以录制用户的访问过程,然后用tsung回放,让压力测试更逼真。实际上recorder是一个http代理,启动recorder后,将浏览器的代理指向它,默认端口是8090,用户只需要用浏览器浏览被测试的服务器,tsung-recorder会将这个过程写入到配置文件中。
5.2、添加请求的变量,在压力测试的过程中,可能需要手机号,用户ID、股票代码之类的变量,tsung支持文件随机读取,可以将这些参数按照一定的规则写入文件,在配置文件中定义读取的规则,就能在请求时拿到文件的内容。定义一个文件服务:
<options>
<option name="file_server" id="file1" value="/tmp/x.txt"/>
</options>
读取,在session段中加入
<setdynvars sourcetype="file" fileid="file1" delimiter=";" order="random">
<var name="username" />
</setdynvars>
<request>
<http url="/b.php?username=%%_username%%" method="GET" version="1.1"></http>
</request>
除了从文件读取,也可以随机产生
<setdynvars sourcetype="random_string" length="13">
<var name="rndstring1" />
</setdynvars>
<var name="rndint" />
</setdynvars>
QPS
QPS每秒查询率(Query Per Second) 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力
参考网址:
http://blog.youkuaiyun.com/bxc168/article/details/6020683
http://wwwzhouhui.iteye.com/blog/451298