了解度量标准
下一步是清楚地定义度量标准。度量标准的例子包括:每分钟处理的定单数,或者执行对 ASP 页面的请求所需要的毫秒数。度量标准允许您量化每次测试运行之间进行更改的结果。它们提供了与为您的 Web 应用程序定义的标准之间的一种比较。
为了确定需要跟踪的度量标准,需要采取一系列步骤。您需要定义待回答的问题,为每个问题定义质量条,然后确定将测试结果与质量条进行比较所必需的度量标准。
第一步很直接。例如,您可能想要了解签出响应时间。请记住列出那些与测试策略相关的问题,而避免组织您无法测试的模糊问题。
下一步是为每个问题定义质量条。让我们以典型的定单提交流程为例。我们可能决定站点在峰值负载期间每分钟必须处理 10 份定单,一名用户等到请求执行的时间不应超过 30 秒。为了建立这样一个标准,您可能会注意许多不同的源。首先咨询业界人士,了解系统性能的可接受级别。将历史数据带到这些会议上将有助于讨论,并常常可用来管理预期情况。如果在生产环境中已存在某个版本,则可以从当前站点活动和增加的通信量的短期投影收集数据,或通过查询现有数据库的活动趋势来收集数据。
有了一份问题列表和每个问题的质量标准后,您现在就需要确定使用哪个度量标准。根据上一个例子,每分钟定单数和给定测试中的定单数将是良好的高级度量标准,这些标准可作为站点是否满足质量条要求的指示器。当您想要在测试过程中更新这些度量标准时,应报告给管理层。
较低级的度量标准衡量性能并帮助您解决系统瓶颈和稳定性问题,或将这类瓶颈和问题减到最少。增加性能也许会对高级度量标准产生直接影响。例如,减少特定活动的事务时间可能导致每分钟定单数的增加。
大多数测试工具允许您在个别页上或一组页上设置定时器,并提供运行测试用例的平均时间。两种度量标准均允许您将高级度量标准用于一次又一次测试运行,但它们均不能帮助您深入了解到底是什么需要改进。
对此 Windows 性能计数器很有用。例如,您可以监视 dllhost 进程的 Process:Private Bytes,以检测服务器软件包中的内存泄漏。有关各个Microsoft Internet 信息服务 (IIS) 计数器的适合且详细的描述,可从The Art and Science of Web Server Tuning with Internet Information Services 5.0获取,而图 3描述了用于负载测试的主要计数器以及要注意的趋势。
但是,性能计数器只在识别问题症状时有用,对识别问题原因无用。如果您的系统在 20 名并发用户时中断,则 Active Server Pages:Requests Timed Out 计数器可以真正确认,至少一名用户已超时,但要确定超时的原因却如同大海捞针。这是因为性能计数器数据主要提供操作系统和网络级别的信息。要成功找到问题的原因,需要访问应用层的数据。此任务的关键是,构建分布式日志记录系统,以检索并集中存储来自应用程序中的错误和性能数据。这允许您立刻了解系统是否正在工作。如果系统没有工作,则您就拥有了找到问题领域所必需的信息。
解释度量标准
配置完所有这些度量标准之后,现在您就可以访问大量数据。因此,您将如何以有效率的方式来理解数据?我们将针对解释性能计数器数据讨论三个选项:性能监视器、Perfcol 以及与负载测试工具集成的性能数据。
Windows 2000 中的性能监视器允许您以图形的方式显示各个计数器的进度。一个有用的功能是能够在日志文件中捕获读数,从而允许您在测试运行一完成就以可视的方式检查整个测试运行。图 4说明了在线订购应用程序上的站点活动如何能在性能监视器中得到解释。
沿着与性能监视器同一条线,Windows DNA Performance Kit Beta 包含一个称为 Perfcol 的工具。此工具的用途与性能监视器类似,不同之处在于该工具将取样数据存储在数据库中,而不是写入文件。
一些负载测试工具,例如 Microsoft Application Center Test (ACT) 和来自 Empirix 的 e-TEST 套件,均包含内置的性能计数器功能,它们能在测试的运行持续期间记录度量值。然后计数器数据会写入数据库以供以后访问。ACT 包含在 Visual Studio .NET 中,它集成了性能监视器计数器,允许所有数据均存储在单个资源库中。
不管负载测试工具是否集成某种形式的性能计数器监视,您也许均会发现仍需要诸如性能监视器之类的工具的支持,尤其是如果产生负载的服务器没有适当的安全访问权来监视应用程序服务器时,这种情况在环境包含防火墙时会频繁发生。
无论选择何种监视工具,关键在于存储每次测试运行的度量标准以供将来评估。转回到过去的数据对于理解系统如何响应所作的更改很关键。
对于日志记录系统生成的应用级数据,我们建议构建一个查看器,该查看器使您能够立即访问一个位置内的错误和性能信息。考虑到它所代替的操作是每次要求反馈时在命令行生成 SQL 查询,因此这项工作还是值得的。