当前位置: 首页 > 编程日记 > 正文

Visual Studio进行Web性能测试- Part III

原文作者:Ambily.raj

对于一个多用户的应用程序,性能是非常重要的。性能不仅是执行的速度,它包括负载和并发方面。Visual Studio是可以用于性能测试的工具之一。Visual Studio Test版或Visual Studio 2010旗舰版为自动化测试提供了支持。

介绍

对于一个多用户的应用程序,性能是非常重要的。性能不仅是执行的速度,它包括负载和并发方面。性能测试是对以下问题的回答

  • 我们如何确保我们的新的应用程序将支持预期的用户负载?
  • 如何避免在实际负载条件下会出现的问题?
  • 如何确定响应时间?
  • 如何规划服务器的容量?

Visual Studio是可以用于性能测试的工具之一。Visual Studio Test版或Visual Studio 2010旗舰版为自动化测试提供了支持。

这将是一系列文章的第三部分。

  • Part I: Web测试和配置

  • Part II:负载测试,RIG和负载测试术语。

  • Part III:性能计数器,负载测试结果分析。

性能计数器

性能计数器可以是系统预定义或用户自定义的,用来衡量系统的性能。性能测试结果分析完全依赖于作为测试的一部分而捕获的性能计数器。因此,为了有更好的测试结果和更好的分析,我们首先需要了解每个服务器相关的的重要的计数器。

我们可以使用性能监视器(这篇文章中讨论的)或使用Visual Studio本身,来捕捉性能计数器。为了获取相应的服务器的计数器,在需要在Load test中把服务器添加到computer section。

添加计算机来收集性能计数器

在Load test中,右键单击Run Settings 下的 Counter Set Mappings,选择Manage Counter Sets选项。

Ambily.raj_3703_1

Manage Counter Sets窗口将被打开,在这里我们可以添加计算机。添加计算机系统,并选择相应的计数器。

Ambily.raj_0734_2

当负载测试执行时,我们可以在Visual Studio中观察到每个计算机系统对应的计数器。

Ambily.raj_4250_3

在性能监视器中添加计数器

本文也将讨论设置性能监视器来捕获计数器。如果您使用性能监视器来捕获计数器,那么我们就需要确保在负载测试前启动计数器,并在负载测试完成后再关闭它。还需要从多台服务器合并结果并生成报告。

(译者:在Run中输入perfmon,来打开性能监视器。在性能工具->性能监视器下打开性能监视器图表,在性能监视器图表中,点击+或右键菜单来添加计数器)


重要的计数器

我们根据服务器和服务器上的应用程序来捕获对应的计数器。例如,一个数据库服务器所需的计数器和web服务器上的不同。另外,我们需要为每个服务器设置通用的计数器,如处理器利用率,内存利用率等。在本节中,我们将讨论通用计数器和应用程序服务器以及数据库服务器所需的重要的计数器。在这里,我们将讨论一些重要的计数器,但不是全部。

通用计数器

\Processor(*)\%Processor time -这个计数器衡量处理器的利用率。在所有服务器上捕捉这个计数器,并测量平均使用率。在空闲的情况下,处理器的利用率应低于80%。

\Process(*)\Private Bytes - 指示分配给该进程的内存的字节数。该计数器指示进程的内存使用率。

\Network Interface\Bytes Received/sec, \Network Interface\Bytes Sent/sec, \Network Interface\Bytes Total/sec -这三个计数器指示了服务器的网络使用率。

ASP.NET Web应用程序服务器计数器

\.Net CLR Data\ -这个计数器组包含与以下相关的计数器:连接池的数量,失败的连接尝试的数量和在应用程序服务器上运行的特定进程的连接池的数量。

(译者:.net连接池用于ADO.net和数据库连接,可以参考.NET连接池救生员一文)

\.Net CLR LocksAndThreads\ -这个计数器组包含物理和逻辑线程数和发生竞争(Contentions)的数量。

(译者:逻辑线程指托管线程;物理线程指操作系统线程;Contentions指试图获取托管锁发生的错误)

\.Net CLR Memory\ -这个计数器组包括Gen 0,Gen 1和Gen 2的垃圾回收数量和堆的大小。指示了垃圾收集率和应用程序每轮的内存管理。

\.Net Memory Cache4.0\ -这个计数器组帮助你了解应用程序的缓存实现。

\ASP.Net Applications\ -这个计数器组提供请求处理和应用管理的概览:有多少请求被处理,拒绝,排队或断开,缓存命中率和失误,错误,身份验证失败,输出缓存请求数和失败数,活跃和被丢弃的会话,提交和中止的事务。

数据库服务器计数器

\Database\ -数据库相关的计数器,如数据库高速缓存的大小,数据库I / O读取和写入,页面转换和记录转换。SQL Server特定的计数器被定义在单独的计数器组。

\SQLAgent:Jobs\ -该计数器组包含的计数器指示了SQL Server中运行的作业的状态。指示了有多少作业是是活动的,失败的,正在排队,或已成功执行。

\SQLServer:Locks\ -这个计数器指示在应用程序执行中有多少次死锁发生。

通用术语

在讨论的计数器以及如何理解它们前,我们需要研究性能测试相关的多个术语。

响应时间(Response Time)

大多数的性能测试是为了了解在给定负载情况下应用程序的响应时间。如果应用程序没有完成性能测试,那么预期的用户负载的响应时间可能不会被定义。

响应时间是指一个页面或者事务响应用户所花费的时间。8秒是一个网页标准的最大响应时间。如果页面有很多的图像或视频,它可能需要更多的时间来加载。为了更好的使用,我们可以加载页面中使用异步调用和Ajax。如果响应时间是非常高的,用户的体验将变得糟糕,对应用的使用方法也可能会影响到响应时间。减少响应时间的同时保持丰富的用户界面是一项挑战。

吞吐量(Throughput)

吞吐量是每秒由服务器处理的事务或输入的数量。这指示了服务器每次可以处理的负载或请求的数量。根据吞吐量和响应时间的要求,我们可以来规划的服务器集群。

资源利用(Resource Utilization)

资源利用包括服务器的处理器,内存和网络的利用率。应用程序对服务器资源的利用率确定了,我们是部署一台服务器,还是需要部署多台服务器。

这是三个主要的性能测试术语或者指标。除了这些衡量指标以外,我们有网络时间,等待时间,请求时间,测试组合,负载组合等指标,我们将在后面讨论。

结果分析

现在,我们有所需的计数器数据和性能数据,如响​​应时间和吞吐量等。对于不同场景的性能结果分析,无法在一两个文档中解释清楚。取决于我们收到的作为性能测试的结果数据,分析会有所不同。

例如,假设你得到很高的响应时间,同时具有良好的资源利用率​​。简单来说这意味着,高响应时间不是由于任何资源的问题引起的,它可能是由于你的SQL部分或前端代码引起。查看SQL计数器,并确定是否有特定的页面做了某些数据库调用并产生大量的读,写或占用大量CPU时间。如果是这样的话,这个问题在于数据库查询或存储过程。而后,我们缩小到数据库级别的问题,然后我们就可以使用数据库工具,如SQL Execution plan或Data engine tuning advisor,了解并解决此问题。

如果问题出在应用程序的代码上,然后我们需要研究的问题是,问题是否是由高速缓存,图像,线程,连接池的问题导致的。

结论

我们在下一篇文章中我们将使用一些示例场景来更深入讨论性能测试的结果分析。

本文由知平软件的刘斌华翻译,转载请注明出处。原文地址:http://www.dotnetfunda.com/articles/article1563-web-performance-test-using-visual-studio-part-iii.aspx

知平软件致力于移动平台自动化测试技术的研究,我们希望通过向社区贡献知识和开源项目,来促进行业和自身的发展。

转载于:https://www.cnblogs.com/vowei/archive/2012/09/05/2671596.html

相关文章:

php mysql source_Mysql数据库导入命令Source详解

Mysql数据库导入命令Source详解几个常用用例:1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u root -p dataname >dataname.sql这个时候会提示要你输入root用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录中.…

课堂练习(续)

源程序: Text_2.java import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.te…

任务二:1、选择器 2、连接集中状态的顺序 3、浮动的用发和原理 4、盒模型在IE和Google等不同浏览器的区别与联系...

1、选择器类型 标签选择器,类选择器,ID选择器,组合选择器,伪类和伪元素,属性选择器,子选择器,同胞选择器, :not()选择器 1、同胞选择器 相邻同胞标签: h2 p{ color:red…

struct发送与显示中文

中文的编码显示常常是一个让人头痛的问题,网络传输的时候中文也会变成二进制的流,接收方显示就成了一个大问题。 今天使用python的struct模块来对数据封包解包,同样有这个问题。解决方法是:一般会把python代码文件声明为utf-8编码…

mysql5.7.22密码设置_mysql5.7.22版本修改root密码

mysql5.6之前修改密码(字段password)mysql> use mysql;mysql> update user set passwordpassword(‘123‘) where user‘root‘ and host‘localhost‘;mysql> flush privileges;mysql 5.7.22版本修改密码(字段是authentication_string)mysql> use mysql;mysql>…

配置 php-fpm 监听的socket

一般现在我们配置的PHP的web环境,如LNMP(linuxNginxMysqlPHP), 这里linux可能是centos, ubuntu..., 数据库可能是mysql, postgresql, sql server等。。 在服务器上安装PHP-FPM, nginx后, 我们要配置Nginx的http模块&am…

laravel基础课程---8、laravel响应和视图(响应是什么)

laravel基础课程---8、laravel响应和视图(响应是什么) 一、总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返…

ios应用内购买

参考: 1、http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/ 2、http://iosdeveloper.diandian.com/post/2011-08-26/4366441转载于:https://www.cnblogs.com/foxmin/archive/2012/09/08/2676580.html

mysql查询解析过程_MySQL查询执行过程详解

查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览。查询是一个独立的、功能强大的、具有计算功能和条件检索功能的数据库对象。MySQL数据库中,MySQL查询同样是数据库的核心操作&#xff0…

.net erp(办公oa)开发平台架构之流程服务概要介绍

背景 搭建一个适合公司erp业务的开发平台。 架构概要图: 流程引擎开发平台: 包含流程引擎设计器,流程管理平台,流程引擎服务。目前只使用单个数据库进行管理。 流程引擎设计器 采用silverlight进行开发,本质是对流程…

数据分析-pca协方差

协方差是反映的变量之间的二阶统计特性,如果随机向量的不同分量之间的相关性很小,则所得的协方差矩阵几乎是一个对角矩阵。转载于:https://www.cnblogs.com/erweiyang/archive/2012/09/08/2676997.html

在javascript中判断类型

String 一个字符串始终是一个字符串,所以这一块是很容易。除非使用new(new String)调用,否则typeof将返回“object”。所以也要包含那些可以使用的字符串instanceof。 // Returns if a value is a string function isString (valu…

mysql中日期判断的函数_MySql判断汉字、日期、数字的函数

几个平常用的mysql函数 /***************************************************** 1.判断字符串是否为汉字 返回值:1-汉字 0-非汉字 *****************************************************/ DROP FUNCTION IF EXISTS fc_is_hanzi; CREATE FUNCTION fc_is_h几个平常…

c#.net调用pdf2swf.exe将pdf文件转换为swf,vs中运行正常,布署IIS服务器部署转换后文字部分为空白...

这个是权限问题, 需要在应用程序池中高级设置,将标识改为LocalSystem 转载于:https://www.cnblogs.com/shy1766IT/p/5114971.html

云计算开发要学习哪些东西?云计算开发的内容

云计算是一种基于互联网的计算方式,要实现云计算则需要一整套的技术架构去实施,包括网络、服务器、存储、虚拟化等等。 云计算目前分为公有云和私有云。两者的区别只是提供的服务的对象不同,一个是企业内部使用,一个则是面向公众。…

XHTML+CSS3(Chapter 1)

HTML5 Reference document: http://www.w3school.com.cn/html5/html_5_intro.asp 1. Use <video> to display some video in html (mp4. ogg.) <video src"movie.ogg" controls"controls"> </video> 2. Use <audio> to play …

oracle重建实例_记一次误删Oracle控制文件并恢复过程

概述当你在数据库运行时误删除了控制文件怎么办&#xff1f;很不幸有一次我就有这个情况,虽然是测试环境&#xff0c;这里因为我有事先把控制文件分别备份&#xff0c;所以恢复还是比较简单的。下面简单记录下怎么恢复。问题控制文件版本不一致一般是因为在实例运行时删除了控制…

成都Uber优步司机奖励政策(1月9日)

1月9日 奖励政策滴快车单单2.5倍&#xff0c;注册地址&#xff1a;http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单&#xff1a;http://www.cnblogs.com/mfryf/p/4612609.html 优步奖励低/不挣钱/怎么办?看这里&#xff1a;http://www.c…

vim-map

vim-map 软件版本&#xff1a;  ubuntu10.04  Linux version 2.6.32-42-generic  VIM - Vi IMproved 7.2目录&#xff1a; 1. 简介  2. 映射与运行模式的关系  3. 例子  4. 其他 1. 简介 如果想让 vim 成为你手中的利器&#xff0c;vim 的 map 功能就不得不学&…

Java并发面试,幸亏有点道行,不然又被忽悠了

2019独角兽企业重金招聘Python工程师标准>>> 前言 面试Java&#xff0c;必然要被问Java内存模型和Java并发开发。我被问到的时候&#xff0c;心里慌得一批&#xff0c;“额&#xff0c;是在《Thinking in Java》里面写的吗&#xff1f;果然每天增删改太low了” 要了…

mysql减少锁等待_降低锁竞争 减少MySQL用户等待时间

【IT168 技术】通过锁机制&#xff0c;可以实现多线程同时对某个表进行操作。如下图所示&#xff0c;在某个时刻&#xff0c;用户甲、用户乙、用户丙可能会同时或者先后(前面一个作业还没有完成)对数据表A进行查询或者更新的操作。当某个线程涉及到更新操作时&#xff0c;就需要…

UML中的六种关系的比较与学习

通过不断的学习并绘制UML图&#xff0c;整个画图的过程中深刻体会到其核心部分还是理解事物之间的关系&#xff0c;总结六大关系来深入学习&#xff0c;主要关系有六种&#xff1a;继承、实现、依赖、关联、聚合、组合。 区别于联系&#xff1a; 1.继承&#xff08;泛华&#x…

spark—3(Spark Scheduler)

2019独角兽企业重金招聘Python工程师标准>>> Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据RDD的依赖关系构建…

Tomcat手动配置简述【查询留存】

一、设置JAVA的环境变量JAVA_HOME 略 二、设置Tomcat的环境变量 一次性全配置了 Tomcat的根目录&#xff0c;例如【E:\tomcat-6.0.35】 创建下列环境变量&#xff1a; CATALINA_HOME: E:\tomcat-6.0.35 CATALINA_BASE: E:\tomcat-6.0.35 TOMCAT_HOME: E:\tomcat-6.0.35 然后修改…

linux mysql 不稳定_linux,mysql:今天写出一个十分弱智的bug!

今天写出一个十分弱智的bug&#xff0c;记录一下&#xff0c;提醒自己以后别这种犯错&#xff0c;不怕丢人哈~在写一个分页查询记录的sql时&#xff0c;要根据添加的时间逆序分页输出&#xff0c;之前的写法是酱紫&#xff1a;selectrecord.a, y.c from ( selecta,b from xorde…

IOS XML解析

<?xml version "1.0" encoding "utf-8"?> <video>小黄人</video> <video></video> <video/> <videos> <video> </video> </videos> 不能相互嵌套。 xml中的所有空格和空行都会当成字符来…

BAT架构师分享之:大型网站技术架构

早期的网站为了节省成本一般会设计成集中式系统&#xff0c;应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展&#xff0c;逐渐出现瓶颈&#xff0c;按一定原则**&#xff08;应用拆分、服务拆分、数据拆分、应用解耦&#xff09;**&#xff0c;向分布式系统转…

mysql isreg_`Innodb` MySQL中如何优雅的删除大表跑路

最近很想写写MySQL相关的内容&#xff0c;就从这个话题出发吧有人说删MySQL表谁不会不就是drop table TABLENAME如果在生产环境中&#xff0c;你对一张TB级别的大表&#xff0c;敲下这行命令那么你的主管&#xff0c;大主管&#xff0c;隔壁的大主管 就会气势汹汹的冲向你其原因…

常用正则表达式集锦

链接地址&#xff1a;http://blog.csdn.net/tjcyjd/article/details/48416405 验证数字&#xff1a;^[0-9]*$验证n位的数字&#xff1a;^\d{n}$验证至少n位数字&#xff1a;^\d{n,}$验证m-n位的数字&#xff1a;^\d{m,n}$验证零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$验…

C(第一个C程序) 和 C++ (第一个C++程序)对比碰撞

个人博客首页&#xff08;点击查看详情&#xff09; -- https://blog.51cto.com/11495268 1、简介 C 是对 C 的继承、扩展&#xff0c;但从语言角度来说&#xff0c;这是 两种变成语言&#xff0c;就一定存在不同&#xff0c;本文 就借助于 C、C 的 最精简标准程序 进行对比…