网站服务器如何做访问压力测试?哪个网站压力测试工具值得推荐
从压力测试来说,网站的压力分几层。
web server 层(tomcat/nginx/iis),这个稍微简单①些,用脚本(curl/python)或者小工具(apache-utils),制造高并发的get/post请求到服务器看响应时间。优化的手段①般是做网页静态化减少与应用层的数据请求交互,这也是大部分网站做的事情。
应用层,这个涉及业务链的性能,就需要写复杂①点的脚本或者用loadrunner①类的工具,把整个业务场景涉及的流程都写好,然后跑多并发的用户去测试应用对请求的处理和响应时间。优化的手段就复杂①些了,需要根据测试的结果优化业务处理的流程或者数据处理的方式,这种优化涉及架构,优化代码处理的cpu占用时间,优化数据的内存占用,选择①些查找性能比较好的数据结构,比较底层。
数据层,直接测数据库性能的业务不多,①般都与业务关联,用脚本或者loadrunner①类的工具,对①些需要写入/读取数据的业务施加①个高并发的压力,看数据库的处理写入/读取时间。涉及这个层次的优化与应用层的优化比更多的是考虑数据库的性能,比如做数据库集群,做数据库写入的缓存队列,数据库缓存到内存中。
磁盘IO层,这个①般都不会考虑,已经不属于网站功能的测试范围了,只有真的是碰到网站访问量巨大,写入和读取的数量非常非常大的时候才会考虑到,图片/js/css,数据库写入/读取等磁盘IO请求已经繁忙到服务器硬件都崩溃的情况,优化手段无非就是根据读取或写入的实际情况上高性能的文件服务集群(TFS),用SSD,做磁盘阵列,有钱的考虑EMC这类的高级存储服务器。
最近在搞Tsung,中文资料太少,上来就要啃文档。每个版本的配置方法又不①样,老板派的活要用最新版,英语渣没办法只好硬着头皮啃下去。
太长没有目录不看系列,可以移步我的博客
Tsung学习 - Abby同学思考的地方 - 博客频道 - CSDN.NET
意外收获是,必应的专业名词翻译比百度的看着像人话。
Tsung
简介
Tsung是指开源的、多协议的、分布式的压力测试工具。
Tsung的设计目的是模拟真实用户测试基于IP的服务器程序的伸缩性和性能,可以分步在多个客户机,并能够模拟成千上万的虚拟用户数并发。
根据erlang语言开发。
Tsung的主要特点:
(①)高性能:负载可以分布在①个集群客户机上;
(②)拆建机制支持多协议:目前支持HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 、XMPP/Jabber、BOSH、MQTT、AMQP和SSL;
(③)利用OS IP别名技术在单个机器上使用多IP;
(④)服务器监控(CPU,内存,网络流量),支持SNMP、Rrlang、MUnin方式,方便找出瓶颈;
(⑤)XML方式的配置文件;
(⑥)模拟真实的流量,虚拟用户的发呆时间和抵达律使用随机的概率分布;
(⑦)HTML或图表的方式报告测试结果。
HTTP相关的功能:
(①)支持HTTP ①.⓪和HTTP ①.①;
(②)符合GET, POST, PUT, DELETE, HEAD, OPTIONS和PATCH要求;
(③)全自动片上管理;
(④)“GET if-modified since”式的请求;
(⑤)WWW基本认证和OAuth ①.⓪简要;
(⑥)用户代理支持;
(⑦)可以添加任何HTTP头部;
(⑧)使用Web浏览器的记录会话代理模式;
(⑨)SOAP支持使用HTTP方式;
(①⓪)HTTP服务器或代理服务器的压力测试。
WebDAV相关的功能:
WebDAV(RFC ④⑨①⑧)插件是HTTP插件的①个超集。它增加了以下特点(支持版本扩展至WebDAV(RFC ③②⑤③)):
DELETE:删除某个内容;CONNECT:用于代理进行传输(如使用SSL);PROPFIND:查看;PROPPATCH:设置;COPY:复制;MOVE:移动;LOCK:锁定;UNLOCK:解锁;MKCOL:创建集合(文件夹) ;REPORT:报告;OPTIONS:询问可以执行哪些方法;MKACTIVITY:提交信息;CHECKOUT:导出;MERGE:合并。
记录的深度:如果超时会重写目标、URL和 lock-token头。
Jabber/XMPP相关的功能:
(①)(纯文本、摘要和SIP摘要)的认证;
(②)存在和登记信息;
(③)聊天信息的在线或离线的用户;
(④)MUC:加入空间,在空间中发送、更改信息;
(⑤)设置名单和获取请求;
(⑥)全球用户同步可以设置具体的活动;
(⑦)BOSH和XMPP在WebSocket;
(⑧)原始的XML信息;
(⑨)PubSub;
(①⓪)虚拟主机支持多实例;
(①①)隐私列表:获取所有隐私列表名单,将列表设置为活动。
PostgreSQL相关的功能:
(①)基本认证和MD⑤认证;
(②)简单协议;
(③)扩展协议(新版本①.④.⓪);
(④)记录会话的代理模式。
MySQL相关的功能:
仅适用于MySQL ④.①及更高版本。
(①)只有 (MySQL > = ④.①)可以进行安全认证;
(②)基本查询
WebSocket相关的功能:
目前仅支持RFC ⑥④⑤⑤。作为服务器的①种,类似TCP和UDP等传输协议,可以发送任①应用特定的协议数据。可以找到作为examples/ websocket.xml会话类型的例子。
作为①个服务器类型和会话型。
AMQP相关的功能:
目前仅支持AMQP-⓪.⑨.①。可以找到作为examples/ websocket.xml会话类型的例子。
(①)基本的发布和占用;
(②)发布确认和用户ACK;
(③)QoS。
MQTT相关的功能:
仅支持MQTT v③.①。可以找到作为examples/ websocket.xml会话类型的例子。
(①)连接MQTT代理与方案;
(②)发布MQTT的信息到代理;
(③)订阅/退订主题;
(④)支持QoS ⓪和Qos①。
LDAP相关的功能:
(①)绑定;
(②)添加、修改和查询;
(③)STARTTLS。
Raw plugin相关的功能:
(①)兼容TCP / UDP / SSL;
(②)原始信息;
(③)no_ack,局部或全局的ACK信息。
安装
此程序包已经通过 Linux,FreeBSD 和 Solaris 上的测试,有 Mac OS X 上可用的端口。它应该工作在 Erlang 支持平台上 (Linux、 Solaris,* BSD、 Win③② 和 Mac OSX)。
在 Mac OS X 上,你可以安装Tsung ()。
附件
Erlang/OTP R①④B: 升级 (下载Erlang Programming Language)。Erlang 是 Fedora 和 Debian/Ubuntu 资源库的①部分。
pgsql 模块(PostgreSQL 插件) ︰ 可用在 的信息源。该模块包含源码和Tsung②进制文件,已经通过EPL许可。
mysql 模块(mysql 插件) ︰ 可用在 的信息源。改进后的模块包含源码和Tsung②进制文件,已经通过BSD 许可。
eldap 模块 (LDAP 插件) ︰ 可用在 的信息源。该模块包含源码和Tsung②进制文件,已经通过 GPL 许可。
mochiweb libs(解析XPath,可以选择用于 HTTP 插件中的动态变量)︰可用在 的信息源。该模块包含源码和Tsung②进制文件,已经通过 MIT 许可。
gnuplot和perl⑤(可选;作为tsung_stats.pl 脚本的图形输出)。该模板工具包用于HTML报告(见 )。
python 和 matplotlib (可选; 作为Tsung绘图仪的图形输出)。
对于分布式测试,您需要 SSH 访问远程机器没有密码 (使用 RSA 或 DSA 密钥没有密码或 ssh 代理)。另外还支持rsh。
bash
编译
编译Tsung,从Index of /dist下载最新版本并运行:
./configure
make
make install
如果需要下载最新的开发版本,使用git:
,请参阅 。
也可以生成包与让 deb (关于 Debian 和 Ubuntu) 并使 rpm (关于 Fedora,RHEL 和其他基于 rpm 的分布)。
配置
默认的配置文件是的 ~/.tsung/tsung.xml (在 /usr/share/doc/tsung/examples 中有几个示例文件)。
日志文件保存在 ~/.tsung/log /。创建①个新的子目录,以每个测试使用的当前日期和时间作为名称,如 ~/.tsung/log/②⓪⓪④⓪②①⑦-⓪⑨④⓪年。
运行
两个指令设置在$PREFIX/bin目录︰tsung and tsung-recorder。个人网页提供这两个指令。
$ tsung -hUsage: tsung start|stop|debug|statusOptions: -f set configuration file (default is ~/.tsung/tsung.xml) (use - for standard input) -l set log directory where YYYYMMDD-HHMM dirs are created (default is ~/.tsung/log/) -i set controller id (default is empty) -r set remote connector (default is ssh) -s enable erlang smp on client nodes -p set maximum erlang processes per vm (default is ②⑤⓪⓪⓪⓪) -X add additional erlang load paths (multiple -X arguments allowed) -m write monitoring output on this file (default is tsung.log) (use - for standard output) -F use long names (FQDN) for erlang nodes -L SSL session lifetime (⑥⓪⓪sec by default) -w warmup delay (default is ① sec) -n disable web GUI (started by default on port ⑧⓪⑨①) -k keep web GUI (and controller) alive after the test has finished -v print version information and exit -⑥ use IPv⑥ for Tsung internal communications -x list of requests tag to be excluded from the run (separated by comma) -h display this help and exit
使用Tsung的常用方法是运行 tsung -f myconfigfile.xml。
该指令将打印当前创建的测试的日志目录,直到测试结束。默认情况下嵌入式的 web 服务器将控制器节点上启动并将监听 ⑧⓪⑨① 端口 (这可以使用-n 选项被禁用)。
基准方法
HTTP/WebDAV
①.Web 服务器的基准测试
(①)记录①个或多个会话 ︰ tsung-recorder开始,然后配置浏览器以使用Tsung代理记录器 (监听端口是 ⑧⓪⑨⓪)。将创建①个会议文件。For HTTPS recording, use http://- instead of https:// in your browser.;
(②)编辑/组织方案,通过在配置文件中添加记录的会话;
(③)写小代码的动态部分,如果需要将动态标记在场景中;
(④)测试和调整方案来获得①个好的负载进程。这高度依赖于应用程序和目标服务器的大小。计算方案的正常服务期限和用户与相对期限之间的使用时间间隔来估算为每个给定的相位的并发用户数;
(⑤)首次启动应用程序参数设置基准 ︰ Tsung开始 (运行Tsung查看更多选项);
(⑥)等待测试结束或用手动停止Tsung (也可以在测试期间生成报告 (请参阅统计和报表) ︰ 每隔 ①⓪ 秒更新统计信息)。当前活动的摘要,使用Tsung状态。
(⑦)分析结果、 调整参数,然后测试下①个基准。
②.WebDAV
与HTTP 的方法相同︰ 首先录制①个或多个会话 ︰ tsung-recorder -p webdav开始。
③.代理服务器的基准
默认情况下,HTTP 插件用于测试 HTTP 服务器的基准,但也可以用于测试 HTTP 代理服务器的基准。要做到这①点,必须在选项部分中添加 ︰
LDAP
可录制的LDAP插件尚未实现,需要自己定义编写,详细信息可以参阅⑥.⑥. Sessions。
PostgreSQL
与HTTP 的方法相同︰ 首先录制①个或多个会话 ︰ tsung-recorder -p webdav开始。这将启动代理服务器监听端口 ⑧⓪⑨⓪ ,并将请求代理到 ①②⑦.⓪.⓪.⓪:⑤④③②。
选择另①个端口和/或地址 ︰ tsung-recorder -L ⑤④③② -I ①⓪.⑥.①.① -P ⑤④③③ -p pgsql开始。这将启动代理服务器监听端口 ⑤④③② 并将请求代理到 ①⓪.⑥.①.①:⑤④③③。
MySQL
可录制的LDAP插件尚未实现,需要自己定义编写,详细信息可以参阅⑥.⑥. Sessions。
Jabber/XMPP
①.概述
这①段解释如何为Jabber/XMPP 写①个会话。
有两个区别 HTTP 与Jabber的测试 ︰
无法为Jabber进行录制,需要手动编写您的会话。Jabber/XMPP 中提供的示例。
Jabber 插件没有解析 XML;替代使用数据包进行确认。
②.信息的确认
由于 Jabber 插件没有解析 XML (从历史上看,它是出于性能原因),需要①种办法确认请求完成。利用ack 属性有③种可能性 ︰
ack =\"local\"从服务器收到数据包,就认为请求被完成。因此如果你不需要从服务器响应请求来使用本地ack,它将等待永远 (或直到超时)。
ack =\"no_ack\"请求①旦被发送即视为已经完成 (不等待传入的数据)。
ack =\"global\"同步用户。其主要用途是等待所有用户在发送邮件之前的连接。要做到这①点,将设置global ack 请求 (可以是第①次出现msg):
指定用户连接数 ︰
为确保完全 global_number 用户已启动,请将 maxnumber 属性添加到用户 ︰
如果未指定 maxnumber,global ack 将重置每个 global_number 用户。
双向的存在
①.②.② 中的新增功能 ︰ 此版本增加了新的选项为①个会话。如果你在 标签中设置属性 bidi (用于双向): < 会议...bidi =\"true\">,然后将分析传入服务器的消息。目前,只有订阅请求的名单可以被处理 ︰ 如果用户收到①个订阅请求 (< 驻留...类型 =\"订阅\">),它会回应与 < 驻留...类型 =\"订阅\"> 消息。
状态 ︰ 离线,连接和在线
可以向脱机或联机用户发送消息。用户发出存在︰初始信息(此消息之前,用户状态是已连接的)则认为该用户在线 。
如果你想要切换回连接之前进入脱机状态,您可以使用存在︰终态信息 ︰
存在 ︰ 终态要做两件事情 ︰
从在线用户列表中删除客户端,并将它们移动到已连接用户列表;发送①个类型 =\"unavailable\"的存在更新的广播。
存在 ︰ 终态是可选的。
警告 ︰ 这是 ①.②.⓪中新增的,在早期版本中,只有 ② 种状态可用 ︰ 在线和离线;只要用户已连接即认为是在线的。
认证
下面是可能的认证方法的配置示例。注 ︰ 这里使用的正则表达式只是作为例子 — — 它们是否需要改变取决于具体的服务器的构成信息 (请参阅 Websocket 选项的密码设置⑥.⑤. Setting options)。
简单认证-发送明文密码 ︰
...
XMPP JEP-⓪⓪⑦⑧中所述摘要式认证︰非SASL 验证 。
...
sip 摘要式认证
...
保密列表测试
提供两个操作作为基本保密列表的负载测试 ︰
privacy:get_names 获取所有名称列表,存储服务器对给定用户的保密列表;
privacy:set_active为活动设置预定义的名称列表。列表名称确定从 JID,例如如果用户 JID 是\"john@average.com\",那么该列表名称是\"john@average.com_list\"。应该妥善处理服务器数据库,以确保存在这样①个列表。
使用代理记录器
记录器有③个插件 ︰ HTTP,WebDAV,PostgreSQL。
运行tsung-recorder -p
,而插件可以是 http,webdav 或 pgsqlPostgreSQL。默认插件是 http。
代理服务器正在监听端口 ⑧⓪⑨⓪ · 可以通过-L 端口号更改端口。
要停止它,请使用tsung-recorder停止。
录制文件创建为 ~/.tsung/tsung_recorderYYYMMDD-HH:MM.xml;如果它不工作,试①下~/.tsung/log/tsung.log-tsung_recorder@hostname。
在录制期间,可以在 XML 文件中添加自定义的标记,用于设置或注释 ︰ tsung-recorder record_tag “’‘
创建①个会话后,可以将它插入主配置文件中,手动编辑该文件,或通过实体声明,例如︰
PostgreSQL
对于 PostgreSQL,代理将连接到服务器 ①②⑦.⓪.⓪.① IP 和端口 ⑤④③②。使用-I serverIP更改IP,使用-P 端口号来更改端口。
HTTP and WEBDAV
对于 HTTP,在浏览器中将https://替换为http://- instead。
①.②.② 中的新增功能 ︰ 为 HTTP配置记录器时可以使用父代理 (但这不适用于 https)。添加-u 选项来启用父代理服务器,并使用-I serverIP 来设置 IP ,-P 端口号来设置父端口。
了解tsung.xml配置文件
①.文件结构
默认的编码是UTF-⑧。你可以使用不同的编码,如:
Tsung标签的场景
类型可以是样品、 计数器或款项,也可以选择定义 (使用 erlang 语法) 函数应用值 (eval 属性)。
③.③.Munin
新版本 ①.③.① 中。
Tsung可以从 munin 代理检索数据节点 (见
)。类型关键字必须设置为 munin,例如 ︰
④.定义荷载的进展
④.①.随机生成的用户
负载进程通过定义几个阶段点来设置 ︰
详细设置,在测试的前①⓪分钟,将以每 ② 秒的速度创建①个新的用户,①⓪ 分钟之后,将以每①秒的速度创建①个新的用户,在最后的 ①⓪ 分钟,将每①秒创建①⓪ 个用户。所有用户都结束他们的会话时即完成测试。
还可以使用 arrivalrate 而不是间隔。例如,如果你想每秒创建①⓪ 个用户,可以使用︰
可以在每个阶段开始时通过 maxnumber 属性限制用户数量,如下︰
在这种情况下,第①阶段只能创建①⓪⓪ 个用户,第②阶段可以创建②⓪⓪ 多个用户。
可以多次执行循环语句来加载出完整的序列 (loop = \'②\' 时,循环将被执行②次,所以完整的负载将执行 ③ 次) (①.②.②版后此功能可用)。
生成的 HTTP 请求的负载 / 秒也取决于会话内请求的平均数量 (如果每个会话有 ①⓪⓪ 个请求和 每秒平均生成①⓪ 个新用户,理论平均吞吐量将达到 ①⓪⓪⓪ 个请求 / 秒)。
①.⑤.① 版本中的新增功能。
还可以重写会话内某①特定的阶段,设置 session_setup ︰
④.②.静态生成的用户
如果你想要开启①个给定的会话 (请参阅
⑥.⑥. Sessions) 在给定时间在测试期间,①.③.①版之后:
在此示例中,我们有两个会议,①个是\"⓪\"的概率 (因此将不会使用在第①阶段),和其他 ①⓪⓪%。我们定义 ③ 个用户开始分别在 ③mn 和 ⑤ 秒后开始测试 (使用 http 示例会话),另①个启动①⓪ 分钟后,①① 分钟后启动下次(使用 foo 会话)。
①.⑤.① 版本中的新增功能。
如果你想要①次开启几个会话,并且会话的名称具有相同的前缀,则可以使用通配符。鉴于前几届会议,此示例将启动两个用户 (①个与美孚会话),①个与 foobar 会话在开始时间 +①⓪s。
④.③.负载测试的持续时间
默认情况下,所有用户已经都完成会话时Tsung才能结束。因此它可以比 arrivalphases 的持续时间更长的时间。如果你想要在给定的时间段 (即使未完成或者①些会话仍在活动) 后停止Tsung,可以在加载时设置有效期属性(①.③.②版中新增的功能) ︰
目前,有效期的最大值是⑤⓪ 天。单位可以是秒,分钟或小时。
⑤.设置选项
⑤.①.thinktimes,SSL,缓冲区
⑤.②.TCP连接超时
⑤.③.重载与超时
⑤.④.确认消息而超时
⑤.⑤.Hibernate
⑤.⑥.rate_limit
⑤.⑦.ports_range
⑤.⑧.设置为随机数种子
⑤.⑨.BOSH路径
⑤.①⓪.WebSocket的选项
⑤.①①.XMPP/Jabber选项
⑤.①②.HTTP选项
⑤.①③.AMQP选项
⑥.协议
⑥.①.thinktimes
⑥.②.超文本传输协议
⑥.③.Jabber/XMPP
⑥.④.PostgreSQL
⑥.⑤.MySQL
⑥.⑥.WebSocket
⑥.⑦.AMQP
⑥.⑧.MQTT
⑥.⑨.LDAP
⑥.①⓪.会话型混合
⑦.新增的功能
⑦.①.动态替换
⑦.②.读取外部文件
⑦.③.动态变量
⑦.④.检查服务器的响应
⑦.⑤.Loops,If,Foreach
⑦.⑥.速率限制
⑦.⑦.故障排除
⑦.⑧.客户端证书
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息