浅谈性能测试分析

性能测试工程师基本上都能够掌握利用测试工具来作负载、压力测试,但多数人对怎样去分析工具收集到的测试结果感到无从下手,下面我就把个人工作中的体会和收集到的有关资料整理出来,希望能对大家分析测试结果有所帮助。 分析原则:

1. 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点)

2. 查找瓶颈时按以下顺序,由易到难。

服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器操作系统瓶颈(参数配置)-〉中间件瓶颈(参数配置,数据库web服务器等)-〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)
    注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。

3 分段排除法 很有效
分析的信息来源:
1 根据场景运行过程中的错误提示信息
2 根据测试结果收集到的监控指标数据

一.错误提示分析
分析实例:
1 Error: Failed to connect to server “10.10.10.30:8080″: [10060] Connection
  Error: timed out Error: Server “10.10.10.30″ has shut down the connection prematurely
分析:
 A、应用服务死掉。
(小用户时:程序上的问题。程序上处理数据库的问题)
 B、应用服务没有死
(应用服务参数设置问题)
    例:在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%
 C、数据库的连接
(1、在应用服务的性能参数可能太小了 2、数据库启动的最大连接数(跟硬件的内存有关))

2 Error: Page download timeout (120 seconds) has expired
分析:可能是以下原因造成
 A、应用服务参数设置太大导致服务器的瓶颈
 B、页面中图片太多
 C、在程序处理表的时候检查字段太大多

二.监控指标数据分析
1.最大并发用户数:
应用系统在当前环境(硬件环境、网络环境、软件环境(参数配置))下能承受的最大并发用户数。
    在方案运行中,如果出现了大于3个用
户的业务操作失败,或出现了服务器shutdown的情况,则说明在当前环境下,系统承受不了当前并发用户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数。
    如果测得的最大并发用户数到达了性能要求,且各服务器资源情况良好,业务操作响应时间也达到了用户要求,那么OK。否则,再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在。

2.业务操作响应时间:
     分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用“事务性能摘要”图,可以确定在方案执行期间响应时间过长的事务。
    细分事务并分析每个页面组件的性能。查看过长的事务响应时间是由哪些页面组件引起的?问题是否与网络或服务器有关?
  如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长,请使用“网络监视器”图确定导致性能瓶颈的网络问题

3.服务器资源监控指标:

内存:
1 UNIX资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。
Windows资源监控中,如果Process/Private Bytes计数器和Process/Working Set计数器的值在长时间内持续升高,同时Memory/Available bytes计数器的值持续降低,则很可能存在内存泄漏。
内存资源成为系统性能的瓶颈的征兆:
很高的换页率(high pageout rate);
进程进入不活动状态;
交换区所有磁盘的活动次数可高;
可高的全局系统CPU利用率; 
内存不够出错(out of memory errors)

处理器:
1 UNIX资源监控(Windows操作系统同理)中指标CPU占用率(CPU utilization),如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。如果服务器专用于SQL Server,可接受的最大上限是80-85% 
合理使用的范围在60%至70%。
2 Windows资源监控中,如果System/Processor Queue Length大于2,而处理器利用率(Processor Time)一直很低,则存在着处理器阻塞。
CPU资源成为系统性能的瓶颈的征兆: 
很慢的响应时间(slow response time) 
CPU空闲时间为零(zero percent idle CPU) 
过高的用户占用CPU时间(high percent user CPU) 
过高的系统占用CPU时间(high percent system CPU) 
长时间的有很长的运行进程队列(large run queue size sustained over time)

磁盘I/O:
1 UNIX资源监控(Windows操作系统同理)中指标磁盘交换率(Disk rate),如果该参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。
2 Windows资源监控中,如果 Disk Time和Avg.Disk Queue Length的值很高,而Page Reads/sec页面读取操作速率很低,则可能存在磁盘瓶径。
I/O资源成为系统性能的瓶颈的征兆 :
过高的磁盘利用率(high disk utilization) 
太长的磁盘等待队列(large disk queue length) 
等待磁盘I/O的时间所占的百分率太高(large percentage of time waiting for disk I/O) 
太高的物理I/O速率:large physical I/O rate(not sufficient in itself) 
过低的缓存命中率(low buffer cache hit ratio(not sufficient in itself)) 
太长的运行进程队列,但CPU却空闲(large run queue with idle CPU)

4.数据库服务器:
SQL Server数据库:
1 SQLServer资源监控中指标缓存点击率(Cache Hit Ratio),该值越高越好。如果持续低于80%,应考虑增加内存。
2 如果Full Scans/sec(全表扫描/秒)计数器显示的值比1或2高,则应分析你的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。 
3 Number of Deadlocks/sec(死锁的数量/秒):死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0。
4 Lock Requests/sec(锁请求/秒),通过优化查询来减少读取次数,可以减少该计数器的值。

Oracle数据库:
1 如果自由内存接近于0而且库快存或数据字典快存的命中率小于0.90,那么需要增加SHARED_POOL_SIZE的大小。
快存(共享SQL区)和数据字典快存的命中率: 
select(sum(pins-reloads))/sum(pins) from v$librarycache; 
select(sum(gets-getmisses))/sum(gets) from v$rowcache; 
自由内存: select * from v$sgastat where name=’free memory’;

2 如果数据的缓存命中率小于0.90,那么需要加大DB_BLOCK_BUFFERS参数的值(单位:块)。
缓冲区高速缓存命中率:
select name,value from v$sysstat where name in (’db block gets’,
‘consistent gets’,‘physical reads’) ;
Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))

3 如果日志缓冲区申请的值较大,则应加大LOG_BUFFER参数的值。
日志缓冲区的申请情况 :
select name,value from v$sysstat where name = ‘redo log space requests’ ;

4 如果内存排序命中率小于0.95,则应加大SORT_AREA_SIZE以避免磁盘排序 。
内存排序命中率 :
select round((100*b.value)/decode((a.value+b.value), 0, 1, (a.value+b.value)), 2)from v$sysstat a, v$sysstat b where a.name=’sorts (disk)’ and b.name=’sorts (memory)’
注:上述SQL Server和Oracle数据库分析,只是一些简单、基本的分析,特别是Oracle数据库的分析和优化,是一门专门的技术,进一步的分析可查相关资料。

性能测试的结果分析是性能测试的重中之重。在实际工作中,由于测试的结果分析比较复

杂、需要具备很多相关的专业知识,因此常常会感觉拿到数据不知从何下手。这也是我学习性能

测试过程中感觉比较尴尬和棘手的事,为此我在研读了《WEB性能测试实战》后特作了以下笔

记,这里只是书中第4章WEB应用程序性能分析的一

部分,贴出来希望和大家共同讨论:

一:性能分析的基础知识:

1.几个重要的性能指标:相应时间、吞吐量、吞吐率、TPS(每秒钟处理的交易数)、点

击率等。

2.系统的瓶颈分为两类:网络的和服务器的。服务器瓶颈主要涉及:应用程序、WEB服务

器、数据库服务器、操作系统四个方面。

3.常规、粗略的性能分析方法:

当增大系统的压力(或增加并发用户数)时,吞吐率和TPS的变化曲线呈大体一致,则系统

基本稳定;若压力增大时,吞吐率的曲线增加到一定程度后出现变化缓慢,甚至平坦,很可能是

网络出现带宽瓶颈,同理若点击率/TPS曲线出现变化缓慢或者平坦,说明服务器开始出现颈。

4.作者提出了如下的性能分析基本原则,此原则本人十分赞同:

——由外而内、由表及里、层层深入

应用此原则,分析步骤具体可以分为以下三步:

第一步:将得到的响应时间和用户对性能的期望值比较确定是否存在瓶颈;

第二步:比较Tn(网络响应时间)和Ts(服务器响应时间)可以确定瓶颈发生在网络还是服

务器;

第三步:进一步分析,确定更细组件的响应时间,直到找出发生性能瓶颈的根本原因。

二:以WEB应用程序为例来看下具体的分析方法:

1.用户事务分析:

a.事务综述图(Transaction Summary ):以柱状图的形式表现了用户事务执行的成功与

失败。通过分析成功与失败的数据可以直接判断出系统是否运行正常。若失败的事务非常多,则

说明系统发生了瓶颈或者程序在执行过程中发生了问题。

b.事务平均响应时间分析图(Average Transaction Response Time): 该图显示在

测试场景运行期间的每一秒内事务执行所用的平均时间,还显示了测试场景运行时间内各个事务

的最大值、最小值和平均值。通过它可以分析系统的性能走向。若所有事务响应时间基本成一条

曲线,则说明系统性能基本稳定;否则如果平均事务响应时间逐渐变慢,说明性能有下降趋势,

造成性能下降的原因有可能是由于内存泄漏导致。

c.每秒通过事务数分析图(Transaction per Second即TPS):显示在场景运行的每一

秒中,每个事 务通过、失败以及停止的数量。通过它可以确定系统在任何给定时刻的实际事务

负载。若随着测试的进展,应用系统在单位时间内通过的事务数目在减少,则说明服务器出现瓶

颈。

d.每秒通过事务总数分析图(Total Transactions per Second):显示场景运行的

每一秒中,通过、失败以及停止的事务总数。若在同等压力下,曲线接近直线,则性能基本趋于

稳定;若在单位时间内通过的事务总量越来越少,即整体性能下降。原因可能是内存泄漏或者程

序中的缺陷。

e.事务性能摘要图(Transaction Performance Summary):显示方案中所有事务的

最小、最大平均执行时间,可以直接判断响应时间是否符合客户要求(重点关注事务平均、最大

执行时间)。

f.事务响应时间与负载分析图(Transaction Response Time Under load):通过

该图可以看出在任一时间点事务响应时间与用户数目的关系,从而掌握系统在用户并发方面的性

能数据。

g.事务响应时间(百分比)图(Transaction Response Time(percentile)):该

图是根据测试结果进行分析而得到的综合分析图。分析该图应从整体出发,若可能事务的最大响

应时间很长,但如果大多数事务具有可接受的响应时间,则系统的性能是符合。

h.事务响应时间分布情况图(Transaction Response Time (Distribution)):该

图显示了测试过程中不同响应时间的事务数量。若系统预先定义了相关事务可以接受的最小和最

大事务响应时间,则可以使用此图确定系统性能是否在接受范围内。

分析到这一步,只能大概判断出瓶颈可能会出在那,要具体定位瓶颈还需要更深入

的分析。没有贴图,看起来有点费劲,如果你对这些图都比较了解,应该是比较简单的.

时间: 2024-08-16 05:26:55

浅谈性能测试分析的相关文章

浅谈性能测试

首先我们从问题入手,为什么我们要进行性能测试?很多人会回答“项目需要”,可是你思考过项目为什么需要做性能测试? 简单来说是因为系统的访问量和操作量比较频繁,大量用户的频繁操作必然会产生一些用户在同时(Same Time)操作一些功能,这就需要系统能够处理这些Same Time操作或者处理速度非常快行,而我们的项目需要节约成本,就需要采用合适的方案来满足这些方面的要求.平时做功能测试实际上是模拟一个用户在对系统的功能进行操作.如果系统有大量的用户访问.有比较频繁的操作量或者说比较大的业务量,那我们

浅谈软件性能测试中关键指标的监控与分析

浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题. Ø  判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能. 而对于用户来说,则最关注的是当前系统: Ø  是否满足上线性能要求? Ø  系统极限承载如何? Ø  系统稳定性如何? 因此,针对以上性能测试的目的以及用户的关注点,要达到以上

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析,左值与右值

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析 by 小威威 1. 知识引入 在C++编程中,动态分配的内存在使用完毕之后一般都要delete(释放),否则就会造成内存泄漏,导致不必要的后果.虽然大多数初学者都会有这样的意识,但是有些却不以为意.我曾问我的同学关于动态内存的分配与释放,他的回答是:"只要保证new和delete成对出现就行了.如果在构造函数中new(动态分配内存),那么在析构函数中delete(释放)就可以避免内存泄漏了!" 事实果真如此么?

性能测试指标浅谈

出入性能测试,大部分人都是从录制脚本调通开始.谁知这是漫漫长征第一步而已,场景设定完成以后,需要加监控指标时,这一堆指标都是干什么使的?下面来浅谈下这些指标吧. 吞吐量 如果是从统计上讲就是在一次性能测试过程中,网络上传输的数据总量.举个例子就像手机一直用流量上网,那本月流量统计就是本月的吞吐量. 一次测试过程中传输了多少数据对于一般的性能测试来说,往往意义不太大.除非有流量限制的需求,对过程的流量总数限定在一定的范围内时候,会关注这个指标. 人们口头上甚至有很多软件实现中所说的吞吐量其实是吞吐

浅谈ELK日志分析平台

作者:珂珂链接:https://zhuanlan.zhihu.com/p/22104361来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 小编的话 "技术干货"系列文章意在分享技术牛人的知识干货,每期主题都不一样哟!期待各位读者在文后发表留言,来一场技术上的交流和思想上的碰撞! 2016年7月20日,本期品高云公开课由叶春草带来"可视化案发现场--浅谈ELK日志分析平台"的分享. 分享嘉宾 叶春草现就职于品高云软件技术支持工程师.就职

[Android] [Java] Process 创建+控制+分析 经验浅谈

无论是Android亦或者Java中或多或少需要调用底层的一些命令,执行一些参数: 此时我们需要用到Java的Process来创建一个子进程,之所以是子进程是因为此进程依赖于发起创建请求的进程,如果发起者被Kill那个子进程也将Kill. 对于Process相信使用过的朋友一定不会陌生,它具有如下特点: 1.创建简单 2.控制难 3.容易导致无法创建子进程 4.如果是多线程那么很有可能造成内存溢出 以上现象如果你只是偶尔使用一次,创建一个进程或许你什么都没有感觉到,但是如果你使用了多线程,进行了

日志分析与splunk浅谈

难易程度:★★★ 阅读点:linux;python;web安全;日志分析; 文章作者:xiaoye 文章来源:i春秋 关键字:网络渗透技术 前言 linux下的日志分析对企业来说非常重要,对我们分析pv或者入侵事件溯源都有很大的价值,今天来简单谈一谈日志分析方向的利器splunk,splunk应该是站在日志分析应用的顶端了,应用广泛功能强大,本文只能简单说说其安装以及应用.p.s:本文环境是自己虚拟机搭建的,不是生产环境,仅仅做演示. 一.Nginx + uWSGI + Python + Dja

浅谈自动化测试流程

浅谈AST(自动化测试)流程,欢迎大家多多指点,多提宝贵意见. AST阶段一:需求收集——分析自动化测试需求 1.举行启动会议,对SUT(被测试的系统)进行总体描述 2.SUT的要求是可测试和可自动化的 3.评估哪些测试可以自动化 4.分析当前生命周期中SUT使用的工具和复用现有的AST工具 5.对AST和测试中需要的工具进行评估,并提出建议 6.确定和讨论测试环境,包括测试环境的采购和安排,列出测试环境的概要 7.与开发相关人员一起走查一遍AST测试需求,最后达成一致意见 8.给出可以自动化的

并发浅谈-锁和Token的应用

并发 即在同一时刻内有多个完成同一任务的进程或线程在同时运行.并发一般发生在大流量集中访问如抢购或秒杀等业务场景中,它所带来的影响主要表现在以下两个方面:1:造成系统的负载压力过大.比如说mysql天生在处理大并发时表现的异常吃力,并发大时经常可以造成数据库挂掉.2:造成业务资源的竞争出现.比如说兑换一个激活码,并发下可能会出现两个人同时兑换到的同一个激活码. 从开发的经验来看,一般开发者在写程序逻辑时,绝大多数的情况下是没有考虑并发问题的:这其中有两个方面,一是与业务有关,二是与经验有关:其中