怎么作性能测试--响应时间

        作性能测试先要懂性能, 响应时间(response time)做为性能测试过程当中两大重要指标之一是咱们必须关注的。
 
        从用户角度来讲,用户最讨厌等待。在大量的处理环境中,超过3秒以上的响应时间将会严重影响工做效率。然而最终用户的感觉不只仅是绝对时间问题,他们对于响应时间的指望是参照以往的经验,而这种指望是相对于他们使用该应用的基准性能。若是使用该应用的当前感觉和以往的经验有很大的差异时,抱怨以及须要支持的电话就会成倍地增长。响应时间对于用户来讲既有客观成分,也有主观成分。
 
        例(1): 对于小说网站来讲,页面的主要功能是向用户提供可阅读的内容,那么用户极可能会将“小说内容”这个时间做为本身感觉到的响应时间;
        例(2): 对于报税系统来讲,页面的主要功能是提供给用户申报纳税的页面,那么用户只有用户打开申报页面,申报纳税成功后,才会以为页面响应完成。 
 
        对于例(1)而言,小说内容彻底能够分段加载,先加载500字内容,等待以前500字加载完成以后,再加载以后的内容,当看完必定内容,用户作鼠标滚动或翻页操做时再加载以后的内容。
        对于例(2)而言,申报纳税须要等待,服务器处理、数据库处理、外部系统通讯、浏览器前端加载等整个流程处理结束以后,才能算做响应成功。
        对于例(1)能够将响应时间理解为“ 应用系统从请求发出开始到客户端收到响应所消耗的时间”。而对于例(2)而言响应时间定义为“应用系统从请求发出开始到客户端接收到最后一个字节数据所消耗的时间”。形成这种差别的缘由是能够采用一些技巧在数据还没有彻底接收完成时进行呈现来减小用户感觉到的响应时间。
 
        下图为Web应用的页面响应时间简要构成。从图中能够看到,页面的服务端响应时间可被分解为网络传输时间(N1+N2+N3+N4)、应用处理时间(T1+T3)、数据库处理时间(T2)和前端浏览器加载时间(T4)。之因此要如此细分响应时间,主要目的是可以更准确地定位性能瓶颈。
 

 

  • N1&N4
        这个阶段用户点击页面,利用Http协议创建链接,作get 请求或post 请求。http链接实际上就是TCP链接和一些使用链接的规则。TCP链接是因特网上的可靠链接。(详细TCP协议知识,详见《 TCP 的那些事儿(上)》 http://coolshell.cn/articles/11564.html、《 TCP 的那些事儿(下)》 http://coolshell.cn/articles/11609.html
        TCP为Http提供了一条可靠的比特传输管道。从TCP链接一端填入的字节会从另外一端以原有的顺序、正确地传送出来。
 

 

 

  • N2&N4
        JDBC(Java Data Base Connectivity,java数据库链接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此能够构建更高级的工具和接口,使数据库开发人员可以编写数据库应用程序。
        简单地说,JDBC可作三件事:与数据库创建链接、发送操做数据库的语句并处理结果。
        数据库创建链接通常经过链接池管理链接,当链接池中某条查询语句执行完成,链接池所获取的链接不会当即释放,而会等待下次查询调用链接。由于创建链接也是极为耗时的操做。

 

  • T1&T3
        java servlet做为线程安全的服务器程序 (注:这里所说的线程安全并不能保证开发人员所作的业务代码也是线程安全的),几乎全部的java web程序都是以此为基础发展而来。(固然你也能够本身用java实现一套cgi,至于什么是cgi,详见 http://baike.baidu.com/subview/32614/12037322.htm?fr=aladdin
 
    servlet生命周期
  1.     客户端请求该servlet 
  2.     加载servlet类到内存 
  3.     实例化、初始化该servlet 
  4.     init()初始化参数 
  5.     service()(doGet()或者doPost()) 
  6.     destroy() 
        加载和实例化Servlet。这项操做通常是动态执行的,在weblogic这类中间件中可以配置servlet并发线程数,同时能监控servlet并发线程数。Server一般会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。
        Server建立一个Servlet的实例
        第一个客户端的请求到达Server
        Server调用Servlet的init()方法(可配置为Server建立servlet实例时调用,在web.xml中<servlet>标签下配置<load-on-startup>标签,配置的值为整型,值越小servlet的启动优先级越高)
        一个客户端的请求到达Server
        Server建立一个请求对象,处理客户端请求
        Server建立一个响应对象,响应客户端请求
        Server激活Servlet的service()方法,传递请求和响应对象做为参数
        service()方法得到关于请求对象的信息,处理请求,访问其余资源,得到须要的信息
        service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员本身开发的新的方法。
        对于更多的客户端请求,Server建立新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象做为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。通常Servlet只初始化一次(只有一个对象),当Server再也不须要Servlet时(通常当Server关闭时),Server调用Servlet的Destroy()方法。

 

  • T2
        在执行和获取结果前,数据库系统对此sql将进行几个步骤的处理过程:
当发布一条SQL或PL/SQL命令时,Oracle会自动寻找该命令是否存在于共享池中来决定对当前的语句使用硬解析或软解析。
    一般状况下,SQL语句的执行过程以下:
  1. SQL代码的语法(语法的正确性)及语义检查(对象的存在性与权限)。 
  2. 将SQL代码的文本进行哈希获得哈希值。 
  3. 若是共享池中存在相同的哈希值,则对这个命令进一步判断是否进行软解析,不然到5步骤。 
  4. 对于存在相同哈希值的新命令行,其文本将与已存在的命令行的文本逐个进行比较。这些比较包括大小写,字符串是否一致,空格,注释 等,若是一致,则对其进行软解析,转到步骤6。不然到4步骤。红色字体描述有误应该转到步骤5
  5. 硬解析,生成执行计划。 
  6. 执行SQL代码,返回结果。 
         软解析在缓冲区里找到相同或类似的SQL语句,能够直接利用,不用从新进行分析生成执行计划了。硬解析则相反, 即整个 SQL 语句的执行须要完彻底全的解析,生成执行计划。而硬解析,生成执行计划须要耗用 CPU 资源,以及 SGA 资源。在此不 得不提的是对库缓存中闩的使用。闩(latch)是锁的细化,能够理解为是一种轻量级的串行化设备。当进程申请到闩后,则这些闩用于保护共享内存 的数在同一时刻不会被两个以上的进程修改。在硬解析时,须要申请闩的使用,而闩的数量在有限的状况下须要等待。大量的闩的使用由此 形成须要使用闩的进程排队越频繁,性能则逾低下。
 
        数据库利用内部的hash算法来取得该sql的hash值,而后在library cache里查找是否存在该hash值。假设存在,则将此sql与 cache中的进行比较。假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工做。这也就是软解析的过程。 (关于执行计划,详见 http://www.cnblogs.com/snifferhu/p/3461982.html )

 

  • T4
        前端页面大体包含html、图片、css、js、flash等元素,对于各类元素由于浏览器版本的不一样而致使加载顺序不一样。对于前端页面加载这块研究并非很深刻,推荐看《Javascript 装载和执行》 http://coolshell.cn/articles/9749.html

 

 
        总结
        在此大体描述了响应时间的概念,以及响应时间的组成,读懂了响应时间,才是性能测试的开始。
 
 
相关文章
相关标签/搜索