为你的ASP程序作一个负载测试(3)
发布时间:2008-10-23 13:48:00
分析测试结果
你可以点工具条上的Reports图标来看产生的报告。这将产生一个与Script tab相临的新的tab。报告被存储在一个大纲视图里。首先,在你的报告下面点Result Codes,这个将给你一个快速的印象,这次测试是否出现了什么问题。如果你看到的状态代码不是200,你也许需要调查一下出现了什么问题,通常的问题包括署名和不正确的URL路径。
点Overview,你将看到这个测试活动的一个简要快速的分析。从ASP的技术角度看,Request per Second,是一个需要深入分析的关键值。这个值越高越好。通常,如果你不能从使用报告和预算中决定出一个特定的目标,你可以让ASP 的Requests per Second值高于30,当然这个ASP是没有连数据库或使用其他组件的。因为可以预见,连接数据库将增加程序的负担。
虽然有Request per Second这个计数器默认包含在WAS里,你也许想增加其他的计数器。你可以在点了Perf Counters的图标后通过点Add Counter来增加其他的计数器。一个特别有用的计数器是ASP Requests Queued,这个计数器往往是在识别一个阻塞或长期驻留的页面或组件时的关键。关于分析ASP性能的资源有:
· Tuning Internet Information Server Performance
· Navigating the Maze of Settings for Web Server Performance Optimization
· IIS 4 Resource Kit
影响性能和可测量性的因素
服务器组成,数据库访问,和其他因素会大大降低ASP的Request per Second值。不同的配置选择也会起到不同的作用,在这里我要指出几个常出现的因素:
· 如果你在访问一个数据库,你是否有做连接池?关于连接池的详细资料请看Pooling in the Microsoft Data Access Components.
· 你是否在使用ASP Session 变量来存储状态?Session 变量会很快地影响可测性。它们需要服务器资源,而且如果你想增加机器以扩展性能,它们会起阻碍作用,因为Session是与特定机器相关连的。无状态是最大化可扩展性的方法。关于Session的替代请参考这篇文章: HowTo: Persisting Values without Session.
· 你是否在Session状态中存储有Visual Basic的组件?现在就去掉它们。Session中的Visual Basic对象会导致线程相关性而且会干扰打击IIS的线程池。这是一个复杂的主题,但是满足它的经验方法是:不要在Session中存储Single-threaded Apartment (STA) objects。如果你需要在Session中保留对象,它们应该被标记为”Both”,而且你需要自己聚合这些自由线程成为一个集合。Active Template Library (ATL)可以创建这样的怪物。
· 你的网络程序是被限定运行在它自己的内存空间的吗?实际上我们推荐进程保护。然而,如果你需要榨出一些额外的性能,在进程中运行你的网络程序将会节省一些交叉进程集合的开销。
· 当涉及Microsoft Transaction Server (MTS) components时,如果组件是作为服务器包而运行的而不是库包,那么将会有明显的性能区别。一个通常的建议是设置网络程序在它自己的内存空间中运行,然后在库包中运行MTS组件。
模拟多用户的情况
我会简要的介绍如何在WAS中模拟多用户请求的情况。你需要做两件事:
1. 在Settings面板改变Concurrent Connections。
2. 在Users创建用户,至少要创建多于你在Concurrent Connections里指定的用户数。
要改变并发用户数,点Settings图标。如果少于100个用户,你可以直接设置Stress Level,要模拟多于100个用户,你还须设置Stress Multiplier。基本公式为:用户数(线程数)= Stress Level * Stress Multiplier.如果要模拟1,000个用户,你可以设置Stress Level为100而Stress Multiplier为10。
如果你在没有设置足够的用户前尝试运行脚本,你将会得到一个警告。通过点Users图标可以修改你的用户数,你将在右边的窗口看到一个默认的Default组。双击Default组展开你的用户列表,如果你被允许匿名访问,那么你只要简单的填入新用户的代码然后点Create就可以了。
运行需要署名登录的测试
如果你想运行需要署名登录的页面,那么你需要创建合适的用户名和密码以便WAS在运行时可以使用。这同样是在Users设置的。你可以一开始就通过Remove All去掉当前的用户列表,然后添加你需要的用户,你也可以选择从文本文件导入用户名和密码。
但是无论如何,需要确保这些用户拥有有效的帐号,而且他们都可以访问IIS服务器。如果你使用的是BASIC基本认证用户帐号,你可以通过在你的浏览器提交证书来测试这个帐号,在文本文件写出Request.ServerVariables("AUTH_USER")这个值将会有很大的帮助作用。我们修改后的ASP代码将看起来是这样的:
oTS.writeline("Session Id: " & Session.SessionId & chr(32) & _
"Time: " & Cstr(now()) & "AUTH USER: " & chr(32) & Request.ServerVariables("AUTH_USER"))
使用WAS的技巧和提示
作为结束,我会提供一些技巧和提示,还有一些经验总结:
· 调整你的网站的日志文件的存储,因为这个文件将会快速的增大(见IIS文档)
· 通过设置注册表中的HKEY_LOCAL_MACHINE\Software\Microsoft\WAS\SessionTrace的DWORD为1,你可以以调试的方式追踪WAS的活动
· 如果你的WAS报告显示错误,务必检查Event Log,在工具外用浏览器浏览你的页面,然后检查服务器的日志:\WinNT\system32\LogFiles\W3SVCi
· 如果你的测试客户端机器的处理器使用率超过了%85,你也许需要添加更多的测试客户端
· 一些更有趣的话题会在WAS的文档里出现:Page Groups, Query Strings, Cookies, Web Application Stress Object Model和Active Server Page Client (这个会让你有能力通过Web远程控制测试客户端)
请注意这是个没有技术支持的工具,发送你的问题到webtool@microsoft.com。你可以在Web Application Stress Tool这个网沾上搜索一些常见的问题。你也可以对这个工具进行编程,在同样的网站上有对象模型的参考。
资源
要想获取更多的信息,WAS的网站上的tutorial是一个好去处。当然,请务必读一下随WAS附带的在线帮助—特别是一个叫Web stress testing overview的话题。
· WebHammer。一个由ServerObjects做的用于测试网络程序和服务器的工具
· LoadRunner .一个由Mercury Interactive做的压力测试工具,可以用来预见企业级程序的系统表现和性能
· Enterprise Monitor .由MediaHouse Software公司出品,用于监视,通报和恢复你的intranet 和 internet网络
· Extreme Soft's PerfMon。为Microsoft Transaction


猜你喜欢
- 一、QQ邮箱SSL发送获取qq授权码ssl发送方式不是使用邮箱密码,而是需要授权码,具体步骤如下:登录发送人qq邮箱>>设置&g
- Python3实现旋转数组的3种算法下面是Python3实现的旋转数组的3种算法。一、题目给定一个数组,将数组中的元素向右移动 k 个位置,
- 什么是 conda ?conda 是开源包(packages)和虚拟环境(environment)的管理系统。**packages 管理:*
- django 返回数据的主要是用django.http.HttpResponse 中的HttpResponse 完成的具体的我直接贴代码吧
- 请教:如何在现存的文档中动态嵌入一段JS?如果是一段CSS呢?创建一个<script></script>并在scri
- 本文实例讲述了python实现中文转换url编码的方法。分享给大家供大家参考,具体如下:今天要处理百度贴吧的东西。想要做一个关键词的list
- 本文实例讲述了Python实现列表删除重复元素的三种常用方法。分享给大家供大家参考,具体如下:给定一个列表,要求删除列表中重复元素。list
- 如何使用migrations的使用非常简单: 修改model, 比如增加field, 然后运行python manager.py makem
- 目录1.变量的引用的底层原理2.变量的分类Python的变量,简单来说有数值型,布尔型,字符串类型,列表,元组,字典等6大类。那么不同变量类
- 前言Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库。在Python/wxPython环境下
- 先来看一道题目:>>> def func(numbers=[], num=1):... numbers.append(nu
- 今天看了一个优化案例觉的挺有代表性,这里记录下来做一个标记,来纪念一下随便的字段定义的问题。回忆一下,在表的设计中很多人习惯的把表的结构设计
- 本文介绍了在js和asp中使用FileSystemObject(fso)来: 创建、添加或删除数据,以及读取文件; 移动、复制和删除文件;创
- python中是区分大小写的,不管是变量、函数、还是类,都要严格的区分大小写。例如,page和Page是两个不同的变量,name和Name也
- 文件内容:excel内容:代码:import xlrdimport jsonimport operatordef read_xlsx(fil
- 我就废话不多说了,直接上代码吧!import numpy as npa = [2,4,6,8,10]average_a = np.mean(
- 这几天花了点时间,将把django开发好的web项目部署到Apache上,参考了官方的一些文档和互联网上的文档,还是花了比较多的时间,这里把
- 如下所示:import pandas as pddef my_min(a, b): return min(abs(a),abs(
- 今天简单使用了一下python的re模块和lxml模块,分别利用的它们提供的正则表达式和xpath来解析页面源码从中提取所需的title,x
- 第一步 关闭代码拼写检查setting–>Inspections–>Spelling–>Typo,取消勾选:第二步 关闭代