性能测试(并发负载压力)测试分析


#1

对于性能测试,一直想要方方面面的总结介绍一下,偶然看见一篇文章,写的很不错,所以拿来分享一下。

分析原则:

  • 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点)
  • 查找瓶颈时按以下顺序,由易到难。

    服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器操作系统瓶颈(参数配置)-〉中间件瓶颈(参数配置,数据库,web 服务器等)-〉应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)

    注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。

  • 分段排除法 很有效

分析的信息来源:

  • 根据场景运行过程中的错误提示信息
  • 根据测试结果收集到的监控指标数据

一.错误提示分析

分析实例:

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、数据库启动的最大连接数(跟硬件的内存有关))

Error: Page download timeout (120 seconds) has expired

分析:可能是以下原因造成

  • A、应用服务参数设置太大导致服务器的瓶颈
  • B、页面中图片太多
  • C、在程序处理表的时候检查字段太大多

二.监控指标数据分析

1.最大并发用户数:

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

2.业务操作响应时间:

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

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

内存:

  • UNIX 资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。
  • Windows 资源监控中,如果 Process\Private Bytes 计数器和 Process\Working Set 计数器的值在长时间内持续升高,同时 Memory\Available bytes 计数器的值持续降低,则很可能存在内存泄漏。

内存资源成为系统性能的瓶颈的征兆:
很高的换页率 (high pageout rate);
进程进入不活动状态;
交换区所有磁盘的活动次数可高;
可高的全局系统 CPU 利用率;
内存不够出错 (out of memory errors)

磁盘 I/O:

  • UNIX 资源监控(Windows 操作系统同理)中指标磁盘交换率(Disk rate),如果该参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。
  • 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 数据库:

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

Oracle 数据库:

  • 如果自由内存接近于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’;

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

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

  • 如果内存排序命中率小于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 数据库的分析和优化,是一门专门的技术,进一步的分析可查相关资料。


本文转自 性能测试(并发负载压力)测试分析


#2

学习了,刚好可以使用上,真不错


#3

有点用,赞一个,再全面点就更好了。 :grinning:


#4

很全面,以后就这么进行性能测试


#5

不错哦,做测试的同学可以参考这个,压测报告中要体现出这些指标,感谢Cloud InSight