首页 > 代码库 > wcat 进行iis 压力测试
wcat 进行iis 压力测试
如何建立起WCAT
Microsoft的Web容量分析工具(WCAT) 是测试你的客户-服务器网络配置的必备工具。这个工具在你的网络上对多种工作量的场景进行仿真,允许你确定你的网络和服务器的最佳配置。WCAT是专门为评估在Microsoft Windows NT 服务器和Microsoft Internet信息服务器(IIS)上运行的Internet服务器而设计的,但是你可以将它用于几乎所有类型的Web 服务器中。不过有一个局限:ASP和ISAPI不在UNIX上运行,所以不能在那个环境下测试。这个工具有一个最好的地方就是价格--可以免费下载。下载的内容中包括非常易于阅读和理解的详细文档。如果你想使用WCAT的话,我建议你先阅读这些文档。
WCAT提供了40个随时可运行的工作量仿真,让你在不同层次的连接下,测试从服务器进行各种规模的页面或内容的下载。从文档中可以看到这些测试的一个详细列表。你可以使用ASP、Internet访问权应用程序编程界面(ISAPI)的扩展名及公用网关界面 (CGI) 应用程序来测试服务器的性能。这是有用的,即使你现在没有使用这些扩展名,因为你可以在配置之前先对扩展名进行测试。另外,WCAT测试运行仿真来为较低级别的通讯测试服务器上的反应,这些较低层次的通讯包括加密套接字协议层(SSL)2.0 和3.0 、私用通讯技术(PCT) 1.0 加密法以及超文本传输协议 (HTTP) 保持(在最初请求完成后,允许将连接维持)。
如果你需要更广泛的测试,可以创建自己的定制仿真并用WCAT运行它们。你甚至可以测试那些与一个以上网络相连接的服务器,并测试cookies 的使用。你还可以用它测试你的本地网络。
如何建立起WCAT
现在你可能急切地想看看WCAT ,那么我们就先来看看开始测试之前首先需要进行的典型设置。要运行一个WCAT测试,你需要4个组成部分:一个服务器、一个客户、一个控制器和一个网络。当你运行测试时,控制器和客户机运行不同的WCAT,而服务器用WCAT文件对请求作出响应(那些文件依赖于你正在运行的仿真)。
■服务器
服务器的责任是对响应连接的请求、管理连接、接收、处理并响应对Web 内容(即Web 页面)的请求。如果你想安装所有的静态文件测试,那么硬盘上需要有220M空间。ASP测试需要的空间不到110K,除了你想要测试的特定内容,在服务器上不需要安装任何东西。你必须安装一个TCP/IP ,并将其限制在网络适配器。
在Windows NT上,当你设置服务器组件时,设置程序会自动将必要的文件复制到适当位置。如果你没有运行Windows NT,那么有些工作就必须自己做。安装服务器文件,将那些以perfsize 开头的目录从Windows NT服务器的www根目录复制到你将要使用的服务器。别忘了还要复制这些目录中的文件。
■客户机
客户机负责让服务器努力工作。说得具体一些,在一个WCAT测试中,你可以在不同层次配置客户,配置的方法是指定测试中客户浏览器的个数;客户请求的大小、类型及速度;发送请求的频率及所请求的页面;测试持续的时间。不必给每个你想测试的客户一个客户机。每个WCAT客户测试都在它自己的程序内运行,所以每个客户机上可以运行一个以上的客户。这些就是所谓的虚拟客户。每个客户机最多可以运行200个客户,这就允许你用较少的资源测试数量惊人的连接(注意:测试200个物理客户只是一个近似数。200个物理客户会给服务器造成更大的负载)。
你要监控计算机上内存的使用情况。如果客户使用的多于它的物理内存(换句话说,它疯狂地进行内容交换),那么你就会感觉速度的降低,而应该减少虚拟客户的数量。通常,除非你的硬件条件太差,客户是不会有问题的。
客户机上必须安装Windows NT 服务器或Windows NT工作站(4.0),硬盘上有1M 可用空间,安装TCP/IP并限制在网络适配器上。
■控制器
WCAT控制器负责管理WCAT测试。这就将在其它机器上进行的实际测试与测试管理的负载分开了。控制器使用输入文件,这些文件规定如何运行测试、测试何时结束,然后将结果写入输出文件中。
要运行预先准备好的测试,控制器上需要包含3个输入文件。如果你想定制测试程序,就可以使用你自己版本的这些文件。你需要包含一个配置文件,规定客户数、虚拟客户数及测试持续的时间。配置文件的扩展名是.cfg ,根据正在运行的测试命名。因此,如果测试名为test1, 配置文件就被命名为test1.cfg。你需要的另一个输入文件是你的脚本文件。这个文件中包含了从服务器请求的页面名。脚本文件的扩展名是.scr ,按照前面的例子,你的脚本文件名应为test1.scr。第三个需要的输入文件是分布文件,它规定了客户请求的频率。这个输入文件的扩展名是.dst ,在上面的例子中命名为test1.dst 。
还有一个附加的可选的输入文件,性能计数器文件,可以用在计数器上来监控性能的监控计数器。它的扩展名是.pfc, 在上例中,这个文件应该命名为 test1.pfc。
有了输入文件,现在该说说输出文件了。控制器生成一个日志文件,其中包含着测试中收集的统计数据。这个日志文件的扩展名是.log,它是一个用逗号分隔的文本文件,可以用文本编辑器编辑,或作为电子表格或数据库的输入。如果你指定一个性能计数器为输入,那么控制器还将生成一个性能计数器结果文件(扩展名为.prf )。
作为控制器的机器必须安装Windows NT服务器或Windows NT工作站( 4.0) ,硬盘上要有10M可用空间,要安装TCP/IP 并限制在网络适配器上。
■网络
用于WCAT的网络只是你的客户机、服务器、控制器之间的简单通信连接。网络必须使用TCP/IP,并且网络带宽最好是100M比特/秒。当你建立测试时,一定要确定与网络连接的机器都配置得正确,这样你就能知道性能的问题不是由于安装不当造成的。
■性能及压力测试
为了确定你的Web 应用程序可能达到的最好性能,做如下建议:
◎一个孤立的私用网络(这是理想的)
◎足够的客户,以充分发挥服务器的潜力
◎充分的网络带宽(100 Mbps 或更高)
◎多个网卡以分散负载
◎一个多处理器机器用于伸缩性测试(这是理想的)
◎重新运行测试,查看测试结果是否能再生
◎先用浏览器查看页面,以确定应用程序设置和运行正确
如果你想测试应用程序在平均负载下的性能,就应该设置一些性能指标(每秒装载页面数、CPU的使用比例、响应时间),并努力达到这些指标。
如果你的目的是进行压力测试,那么你不一定需要私用网络和许多客户。将你的应用程序置于适度的负载下就足以暴露问题;在服务器上运行控制器和一个客户就足够了。这当然比在单一浏览器中刷新页面更有效。如果你想在较高层进行压力测试,那么使用私用网络和许多客户是有好处的。另外在多处理器机器上运行压力测试也是发现流的问题的好方法。
用设置程序在每台计算机上安装了所需要的文件之后,第一次运行WCAT时应该配置客户和控制器机器。你需要知道这些机器的IP地址。通过使用TCP/IP的 ping 命令行功能,可以获取IP地址,这个地址对应于方括号中的4个数字(比如说, [11.1.38.2])。这些数字代表机器在网络上的IP地址。
■配置
有了IP地址以后,你就可以配置客户和控制器了。WCAT控制器是在命令行提示符下配置的。只需要进入包含控制器的目录(在默认状态下,这个目录是 /webctrl, 因此你应该键入 cd /webctrl),然后键入config IP地址或计算机名。如果你要测试多个网络的话,就用计算机名。
配置客户与配置控制器一样。这次还是在命令提示符下,进入客户所在的目录,并键入config 控制器名IP地址(控制器名指的是控制器机器的名字,IP地址指的是客户机)。
■运行
运行WCAT主要有5个步骤:
◎第一步:起动WCAT客户、控制器和服务器。
在客户机上起动WCAT客户,方法是在提示符下,转到客户目录,键入client (这是一个批处理文件,运行的程序是wcclient.exe)。程序试图与控制器进行连接。如果连接不上,那么10秒钟之后程序再进行连接,并继续每10秒钟连接一次,直到你终止wcclient.exe的运行。要终止wcclient.exe,在命令提示符下键入CTRL+C。
然后,在控制器上起动WCAT的控制器程序(wcctl.exe) ,指定你想要运行的测试。在命令提示符下,转到控制器目录,键入run 测试名 [开关] (其中测试名是你所运行的测试的名字,开关是选项)。当你运行控制器程序时,使用-a 服务器IP 和-n 服务器名。-a 开关指定将要测试的服务器,-n 开关指定服务器名。在WCAT文档中可以找到所有可能用到的开关列表及它们的使用方法。
最后在服务器上起动IIS和HTTP 服务。
◎第二步:准备
在准备阶段,控制器向客户机发送指令,客户开始向服务器发送请求。在准备阶段不收集输出,因为这时服务器的反应速度比平时要慢(经常用到的页面、对象及指令还没有被处理器所缓存)。
◎第三步:实验
在实验阶段,控制器指示客户机向服务器发送特别的请求,服务器作出反应。收集统计数字,并将状态信息发送给客户机。控制器监控测试的全过程。这时WCAT正在确定你的服务器基于所仿真的工作量的性能。如果你已经指定,你想要监控性能计数器,那么在实验阶段,控制器就监控这些值。
◎第四步:冷却
所有工作完成后,就到了冷却阶段(你应该不希望你的服务器抽筋吧,是吗?)。在冷却阶段,控制器指示客户机停止发送请求。客户结束他们的操作,虽然客户继续收集统计数据,这些数据不再为输出而保存;因为冷却并不指示一个真正的工作量,因此这些统计数据没用。
◎第五步:报告
在报告阶段,客户将收集的数据发送给控制器。一旦所有的数据都发送之后,控制器就关闭客户连接。要知道WCAT 还在你的客户上运行,因此它们会恢复到初始配置并试图与控制器连接。控制器所收集的数据被写入一个日志文件中。写入的一行文本代表一个客户,其中包括读取页面的总数、每秒读取页面的平均数、每个客户读取页面的实际数。这时,如果你指定你想要监控性能计数器,这个数字将被写入性能结果文件中。
分析结果
写到日志文件中的信息包括一个文件头、结果、性能计数器(如果你指定要将这些包含进去的话)、文件及类统计数据。头包含测试的一般信息,如运行测试的日期和时间、使用的输入和输出文件及持续时间。在WCAT文档中有关于头的域、结构的详细资料,以及一个例子。
向.log 文件中写入的有许多细节,其中最有趣的可能就是“读取页面”表。第一个数字栏是所有客户机所读取的页面的总数。第二栏是第一个客户机每秒中所看到的页面的速率。第三栏是第一个客户机所看到的页面的总数。如果你有多个客户,就会在后面继续看到每个机器的速率和总数。
日志文件的结果区是一个表格,它总结了在测试中所收集到的所有数据。收集到的数据包括请求的页面数、响应时间、连接以及有可能遇到的所有错误。在WCAT文档中有表格的格式及每栏的构造。
如果你指定想要监控性能计数器,那么WCAT日志中有一部分详细记载了这个内容。这个数据还在一个表格中表现,包含每页中每个计数器的平均值。
日志的文件区包含一个表格,其中有测试中请求的文件数及客户接收到的文件数。
日志的最后一部分是类统计数据区,其中包含的数据代表客户上页面恢复的速率。包括成功恢复的页面数、错误率以及某一特定类型的页面(换句话说,就是页面的类)被请求的比率。你可以用这些数据来确定哪一类页面被请求得最多。
使用和记录性能计数器
前面已经提到过,你可以选择在基于Windows NT的服务器上使用WCAT 的性能计数器。用性能计数器,你可以测量处理器、物理内存、硬盘子系统、内存缓冲的使用情况,还可以使用所使用的服务(如IIS)的性能。为了使用性能计数器,在运行控制器时需要使用-p开关,你需要提供一个扩展名为.pfc 的文件,它指定你想要监控的计数器。默认状态下,这个文件在WCAT控制器的/Scripts 目录下。
使用Sample.pfc
有一个性能计数器的样本输入文件--Sample.pfc--被安装在WCAT控制器的/Scripts 目录下。要监控的每个计数器都在单独的一行中列出,向左对齐,无制表符。每一行中可以加入注释,在每行开头加一个#号即可。每一个文件中最多有50个计数器。.pfc 文件中一行的语法是object(instance)/counter。 Object 是你想要监控的项目的名字,如过程。instance是对象的特定例示的名字, counter 是你想要监控的对象的实际属性。要监控IIS过程Inetinfo所使用的处理器时间,可以在.pfc 文件中增加以下条目。在这个例子中,Processor 是对象,inetinfo 是例示,%Processor Time 是计数器。
Processor(inetinfo)/% Processor Time
为了确定你可以监控的对象,运行性能监控功能(在命令提示符下运行perfmon.exe ),从编辑菜单中选择“增加到图表”项。将会出现以下的对话框对你进行提示:
在对话框中,你可以从下拉菜单中选择对象、例示和计数器。点击解释按钮,可以得到每个计数器意义的描述。
下表列出了一些计数器:
对象 | 计数 | 注释 |
Active Server Pages | 分配的内存 | |
每秒的请求 | ASP满足的请求的速率 | |
请求执行时间 | 一个请求执行所用的平均时间 | |
请求等候时间 | 执行前一个请求在队列中等候的时间 | |
失败的请求总数 | ||
排队的请求数 | ||
拒绝的请求数 | ||
当前的会话 | ||
Process(inetinfo) | 处理器时间 | |
特别时间 | ||
用户时间 | ||
私用字节 | 这个过程使用的内存总数。如果这个数字无限增长,就说明某些东西、某些地方(如ISAPI ASP 组件) 功能减弱 | |
工作设置 | ||
线程流计数器 |
Internet Information Services Global | 缓存命中 | |
Memory | 可用字节 | |
每秒页面错误 | ||
Web Service(_Total) | 每秒接收字节数 | |
每秒发送字节数 | ||
当前匿名用户 | ||
当前非匿名用户 | ||
当前连接 | ||
System | 总处理器时间 | |
每秒上下文转换 | ||
每秒系统调用 | ||
Processor(0) (each processor) | DPC速率 | |
每秒中断数 | ||
每秒排队的DPC |
性能计数器中的结果要写入一个特殊结果文件, testname.prf (其中 testname是测试的名字)。这是一个用逗号分隔开的文本文件,可以用任何标准文本编辑器来阅读,或用它来作为电子表格或数据库的输入。但是这个文件不能直接用PerfMon读。这个文件包含头信息(计数器数、机器名、命名的起始时间)、栏头、一个包含收集的性能数据的表格。有关完整的语法和这个文件的使用,可以参考WCAT文档。
现在我们更多的为大家介绍一些WCAT的应用。
编写你自己的WCAT测试脚本
你可以定制WCAT 运行的场景,方法是指定不同的命令行开关、修改服务器和客户机的配置、使用你自己的ASP、ISAPI或 CGI 脚本、改变客户和控制器的输入文件。在前面的部分,我谈到了改变性能计数器文件的能力。你还可以根据需要改变配置(.cfg)、脚本(.scr)和分配(.dst)文件。
默认状态下,配置文件位于控制器的/webctrl 目录下。这个文件中的信息包含测试中使用的缓冲器数、要使用的客户机数、要使用的流数以及测试持续的时间。
要确定你运行测试所需要的脚本,你可以修改脚本文件。在这个文件中,你可以指定你想要测试的特定ASP,以及ISAPI 和 CGI 扩展。以下是WCAT 文档中的一个样本脚本文档。
# ######################################################################
#
# Test script file for WCAT
#
# ######################################################################
# Format of Script Specification:
#
# ClassId Operation Files
# Note: Operation Strings are case insensitive
#
# Plaza Welcome page = >
NEW TRANSACTION
classId = 1
NEW REQUEST HTTP
Verb = "GET"
URL = "/scripts/welcome.py"
# Click Repeat Shopper = > Plaza Lobby
NEW TRANSACTION
classId = 2
NEW REQUEST HTTP
Verb = "GET"
URL = "/prd.i/pgen/plaza/JQ04Q9JF66SH2JS700Q79TREBNBGAU1M/plaza1.html"
# Click AG = > AG Lobby
NEW TRANSACTION
classId = 3
NEW REQUEST HTTP
Verb = "GET"
URL = "/prd.i/pgen/ag/JQ04Q9JF66SH2JS700Q79TREBNBGAU1M/lobby.html"
# Click Big Picture
NEW TRANSACTION
classId = 4
NEW REQUEST HTTP
Verb = "GET"
URL = "/prd.i/pgen/ag/JQ04Q9JF66SH2JS700Q79TREBNBGAU1M/ag_bigpicture.html"
分配文件用来设置每个处理所使用的时间百分数。如果你定制你的脚本文件,还需要给测试使用一个定制的分配文件。
使用IIS扩展日志文件发现运行时间错误
除了使用WCAT,你还可以使用IIS的扩展日志功能发现ASP中的错误。你可以打开URI_Query 扩展日志文件中记载ASP的错误。默认状态下,这个文件是没有打开的。打开它的技巧有以下几步:
1、选择一个Web或 FTP 站点,打开它的属性页。
2、激活日志,选择W3C 扩展日志文件格式。
3、点击属性。
4、在扩展属性页上,选择你想要记入日志的域(在本例中,, URI_Query)。默认状态下激活的是时间、
客户IP地址、方法、URI Stem 和HTTP状态。
5、点击应用。
用WCAT维护Session 数据
如果你想用WCAT维护 ASP 的Session 数据,可以利用cookies。在你的脚本(.scr) 测试文件顶部增加这样一行:
Set Cookie="< CookieName >"
你将cookie 设置成什么并不重要;只要你设置了就行。通过设置一个cookie ,WCAT创建的每个虚拟目录就都有了它自己的ASPSESSIONID cookie,这就提供了维护session 状态的能力。就是说WCAT为每个虚拟用户维护一个持久的cookie 集合。要清除某一特定cookie的值,可以使用以下脚本:
NEW REQUEST CLEAR_COOKIE
Set Cookie = "< cookie to clear >"
在你的脚本中可以发布多个CLEAR_COOKIE和Set Cookie 指示,以控制cookie 的寿命。构成任意的cookie 请求的唯一方法就是在Set RequestHeader 指示中进行编码。这对于测试那些不使用ASP session状态的客户应用程序是有用的。
用WCAT仿真邮递的数据
在一个真正的Web 应用程序中,你会发现有时需要将某些数据邮递到一个URL。Web Publishing 程序员参考资料提供了你可能会用到的Web Publishing API 的详细情况。使用WCAT时,你可以仿真将数据邮递到一个特定的URL。要将数据邮递到一个ASP表单,有以下步骤:
◎Verb = "POST"
◎RequestHeader = "Content-Type: application/x-www-form-urlencoded/r/n"
◎RequestData = "http://www.mamicode.com/Field1=Value1&Field2=Value2&Field3=Value3/r/n"
新WCAT功能及修复
在WCAT的最新版本中,增加了一些新功能和臭虫修复。包括以下内容:
1、如果测试期间没有进行请求,日志文件字节计数器就不被破坏。
2、如果你有一个不能完成的重定向,现在就将其列为失败的连接。
3、用户名和口令现在可以接收一个文件名,并可以使用这个文件的内容。每个文件只能有一个用户名-口令对。
4、现在可以规定通过一个请求来测试服务器。
5、改进了SSL测试。现在可以用新指示SSL_Protocol来指定用于SSL (https) 请求的端口。如果SSL_Protocol 没有指定,那么WCAT就要与服务器协商使用最好的安全协议。在完全理解如何使用它之前,不要使用 the SSL Provider指示。在脚本样板中也取消了这个指示的使用。
6、现在在输入文件中的任何地方都可以替换URL(而不是只在头部)。由于使用了宏替换,会降低性能。但是性能的降低不会很大,除非你在使用大型文件进行替换。性能的降低只会发生在WCAT第一次通过每个文件时。这就是在准备阶段,所以,如果你选择了使用替换功能,就要确保你的准备阶段足够长以处理这个额外的工作。
在WCAT以前的版本中,不管是否使用了替换,都会由于使用了宏而对性能有所影响。现在当使用了动态的和每个请求都变化的宏时,这样的轻微影响依然会发生。
7、改进了HTTP重定向操作来支持服务器、特定端口号及安全性。通过MaxRedirects脚本指示(它是一个DWORD),你可以设置重定向的最大值。默认状态下,这个最大值是0,它代表无限多的重定向。
总结
WCAT只是监控你的IIS服务器的可用工具之一。INetMonitor 是一个用来进行容量规划、负载监控、硬件配置及仿真的工具。它是Microsoft BackOffice 资源工具箱(第二版)携带的,可以从Microsoft Press得到。有关INetMonitor的简单介绍,可以在灵活易用的容量规划工具INetMonitor一文中看到。