首页 > 代码库 > 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一文中看到。