程序猿也需要知道的性能测试知识总结

性能测试简介

在进入基准测试部分之前需要一些性能测试的概念科普,帮助更好地阅读测试结果。

  • 什么是性能测试

性能测试是通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。

目的:验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。

性能测试相关概念

响应时间

从发起请求到收到请求响应的时间

网络传输时间:  t1 t4

服务器处理时间: t2 t3

image-20200712165331075

并发/并发数/并发用户数

  • 并发

    狭义:同一时间做相同的事情
    广义:同一时间做不同事情、混合场景

性能测试:简单的狭义并发、然后再广义的并发,即:先做简单接口性能测试、在做业务性能测试、最后做混合业务场景性能测试

  • 并发数:单位时间内向服务器发起请求的用户数

    并发用户数:用于模拟真实用户想服务器发起请求的性能测试虚拟用户数量

    扫描二维码关注公众号,回复: 11780839 查看本文章

    系统用户数:狭义上来说,可以理解为系统注册用户数;广义上来说,可以理解为所有访问过系统的用户数

    在线用户数:当前正在访问的系统用户,不一定有压力

吞吐量、吞吐率

衡量网络性能的重要指标

吞吐量:网络传输的数据量(处理客户的请求数)

吞吐率:单位时间(可以是秒/分/时/天)内网络成功传输的数据量,如请求数/秒、页面数/秒

事务,TPS(Transaction Per Second)每秒事务数

事务:可以看作是一个动作或是一系列动作的集合,例如登录,从登录开始到登录结束为一个事务。

TPS:衡量系统处理事务或交易的能力,即服务器对客户请求的能力,每秒处理的事务数,一般在LoadRunner上使用,设置事务,然后统计单位时间内系统可以成功完成多少个定义的事务。

点击量、点击率(Hits Per Second)

点击数:指Web Server收到的HTTP请求数。

点击率:单位时间每秒用户向Web Server提交的HTTP请求数。

区分鼠标点击数:如请求一个网页,网页含有3张图片,向Web Server请求的点击数:1+3=4,而鼠标的一次点击就可以访问网页,点击数只有1次

服务器资源占用

服务器资源占是指在负载情况下,系统的资源利用率。资源占用越低,说明系统越优秀。例如,cpu的占用率、内存使用率、查询Cache命令率、磁盘I/O读写速率等。

CPU常用计数器:

计数器 计数器分析
%Processor Time 如果该值持续超过95%,表明瓶颈是cpu。
Processor Queue Length 指待处理队列中的线程数,如果在处理器队列中总是有两个以上的线程则通常表示处理器堵塞,处理器瓶颈会导致该值持续大于2。此外,跟踪计算机的服务器工作队列将显示当前长度的Server Work Queues\Queue Length,队列长度持续大于4则表示可能出现处理器拥塞。
%User Time 表示消耗CPU的数据库操作,如排序、执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表连接、水平分割大表格等方法来降低该值。
%Privileged Time 此计数器是特定时间的值,指(CPU内核时间)在特权模式下处理线程执行代码所花时间的百分比,如果该参数的值和“Physical Disk”参数值一直很高,则表明I/O有问题。可考虑更换磁盘系统。
%DPC Time 网卡CPU的占用率,该值越低越好。如果这个值大于50%并且Processor:%Processor Time非常高,说明提供的网络已经受CPU影响无法饱和工作

内存常用计数器:

计数器 计数器分析
Available Mbytes 可用物理内存数。如果Available Mbytes的值很小,则说明计算机上总的内存可能不足,或某程序没有释放内存。
Page/sec 表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放内存空间的页面数。一般如果Page/sec持续高于几百,那么应该进一步研究交换活动,有可能需要增加内存,以减少换页的需求。Page/sec的值很大,不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。
Page read/sec 指页的硬故障,是Page/sec的子集,为了解析对内存的引用,必须读取页文件的次数。该数值越低越好,大于5时表示磁盘读而不是缓冲读。
Page Faults/sec 指每秒钟软件页面失效的数目,而Page/sec只表明数据不能在指定内存中立即使用。
Cache Bytes 文件系统缓存(File System Cache),默认情况下为50%的可用物理内存,如果怀疑有内存泄露,请监视Memory \Available Bytes、Process\working set 和Process\Handle Count,如果怀疑是内存的进程Process\Private Bytes\Process\Working set 和Process\Handle Count,如果怀疑是内核模式进程导致了泄露,则还应该监视Memory\pool Nonpaged Bytes、Memory\pool Nonpaged Allocs和Process(process_name)\Pool Nonpaged Bytes
Pages/sec 每秒钟检索的页数,该数字应少于每秒1页
Committed Bytes 以字节表示的确认虚拟内存,确认内存磁盘页面文件上保留了空间的物理内存。每个物理磁盘上可以有一个或一个以上的页面文件。这个计数器只显示上一回观察到的值;它不是一个平均值。其实就是指有多少虚拟内存正在被使用,虚拟内存是占用硬盘空间的内存,和物理内存无关。

物理磁盘常用计数器:

计数器 计数器分析
%Disk Time 指所选磁盘驱动器为读或写入请求提供服务所用时间的百分比。如果三个计数器都比较大,那么磁盘不是瓶颈。如果只有%Disk Time比较大,另外两个都比较适中,则硬盘可能会是瓶颈。若数值持续超过80%,则可能的内存泄露。
Avg.Disk Queue Length 它指的是当前磁盘的队列长度。通俗点来解释就是:计数器反映的磁盘完成请求所用的时间,较高的值表明磁盘控制器由于失败而不断重试该磁盘。这些故障会增加平均磁盘传送时间。
Average Disk Read /Write Queue Length 指读取(写入)请求(队列)的平均数
Disk Reads(Writes)/sec 物理磁盘上每秒磁盘读/写的次数,两者相加,应小于磁盘设备最大容量
Average Disk sec/Read 指以秒计算的在此盘上读取数据所需的平均时间
Average Disk sec/Transfer 指以秒计算的在此盘上写入数据所需的平均时间。一般来说,该值小于15ms最佳,1530ms为良好,3060ms为可以接受,超过60ms则需要考虑更换磁盘或磁盘的RAID方式了
Bytes Total/sec 发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽进行比较。

线程常用计数器:

计数器 计数器分析
Context Switch/sec 如果决定要增加线程字节池的大小,应该同时监视实例化inetinfo 和dllhost 进程这两个计数器。增加线程可能会增加上下文切换次数,这样性能不会上升,反而会下降。如果多个实例的上、下文切换值非常高,就应该减小线程字节池。

进程常用计数器:

计数器 计数器分析
Process/ %Processor Time 被处理器消耗的处理器时间数量。如果服务器专用于SQL Server,则可接受的最大上限是80%~85%
Page Faults/sec 将进程产生的页故障与系统产生的相比较,以判断这个进程对系统页故障产生的影响
Working set 处理线程最近使用的内存页,反映了每个进程使用的内存的数量,如果服务器有足够的空闲内存,页就会被留在内存中,当自由内存少于一个特定的阈值时,页就会被消除内存。
Process/Private Bytes 指进程所分配的无法与其他进程共享的当前字节数量,该计数器主要用来判断进程在性能测试过程中有无内存泄露。我们可以重点监控inetinfo进程的Private Bytes,如果在性能测试过程中,该进程Private Bytes计数器的值不断增加,或是性能测试停止后一段时间,该进程的Private Bytes仍然持续较高水平,则说明应用存在内存泄露。

服务缓冲常用计数器:

计数器 计数器分析
File Cache Hits 文件缓存命中的具体值
File Cache Hits % 全部缓存请求中,缓存命中次数所占的比例,反映了IIS的文件缓存设置的工作情况。对于一个大部分是静态网组成的网站,该值应该保持在80%左右。
File Cache Flushes 自服务器启动之后文件缓存刷新的次数,如果刷新太慢,会浪费内存;如果刷新太快,缓存中的对象就会被频繁的丢弃再重新生成,起不到缓存的作用,通过将File Cache Hits除以File Cache Flushes 可以得出缓存命中率对缓存清空率的比率。通过观察这两个值,可以得到一个适当的刷新值
Connection Refused 该数值越低越好,高数值表明网络适配器或处理器存在瓶颈。

网络常用计数器:

计数器 计数器分析
Bytes Total/sec 发送和接收字节的速度,包括帧字符在内,判断网络连接速度是否为瓶颈,可以用该计数器的值和目前网络的带宽相除,结果应该小于50%。

Apache常用计数器:

计数器 计数器分析
Apache CPU Usage apache 服务器CPU的占用率
Kbytes Sent/sec 服务器每秒发送的字节数
Hits/sec Apache 服务每秒的点击率
#Busy Workers Apache 服务占用率
#Idle Workers Apache 服务空闲率

Mysql 常用计数器:

计数器 计数器分析
Threads_connected 表示当前有多少个客户连接该Mysql服务器,连接数是否过多,网络是否存在问题,它是动态变化的。当Threads_connected ==max_connections时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现报错信息。
Threads_running 如果数据库超负荷了,将会得到一个正在(查询的语句持续)增长的数值。这个值也可以小于预先设定的值。这个值在很短的时间内超过限定值是没有问题的,如果超过预设值时且5s内没有回落,就要同时监视其他的一些值。
Aborted_clients 客户端被异常中断的数值(因为连接到Mysql服务器的客户端没有正常地断开或关闭)。对于一些应用程序是没有影响的,但对于另一些应用程序可能要跟踪该值,因此异常中断连接可能表明一些应用程序有问题
Questions 每秒获得的查询数量。也可以是全部查询的数量,可以根据输入不同的命令得到你想要的不同的值。
Handler_* 如果想监视底层(low-level)数据库负载,这些值是值得去跟踪的。如果Handler_read_rnd_next值与正常值相差悬殊,可能是优化或索引出问题了,Handler_rollback表明事务被回滚的查询数量。
Opened_tables 指表缓存没有命中的数量。如果该值很大,就需要增加table_cache的数值。
Select_full_join 没有主键(key)联合(join)的执行,该值可能是零。这是捕获开发错误的好方法,因为这样的查询有可能降低系统的性能。
Select_scan 执行全表搜索查询的数量,如果发现该值持续增长,说明需要优化,缺乏必要的索引或其他问题。
Select_queries 超过该值(–long-query-time)的查询数量,或没有使用索引查询数量。对于全部查询会有小的冲突。如果该值增长,则表明系统有性能问题。
Threads_created 该值一般较低。较高的值可能意味着需要增加thread_cache的数值,或遇到了持续增加的连接,表明存在潜在的问题。
Pending normal aio reads 该值是innodb io 请求查询的大小(size)。如果该值超出了10~20的范围,可能存在一些瓶颈。

性能瓶颈

1、硬件上的性能瓶颈:

一般指的是CPU、内存、磁盘读写等的瓶颈,为服务器硬件瓶颈。

2、应用软件上的性能瓶颈:

一般指的是服务器操作系统瓶颈(参数配置)、数据库瓶颈(参数配置)、web服务器瓶颈(参数配置)、中间件瓶颈(参数配置)等

3、应用程序上的性能瓶颈:

一般指的是开发人员,开发出来的应用程序(如sql语句、数据库设计、业务逻辑、算法等)。

4、操作系统上的性能瓶颈:

一般指的是Windows、linux等操作系统,如出现物理内存不足时,或虚拟内存设置不合理(虚拟内存设置不合理,会导致虚拟内存的交换率大大降低,从而导致行为的响应时间大大增加,可以认为在操作系统上出现了性能瓶颈)。

5、网络设备上的性能瓶颈:

一般指的是防火墙、动态负载均衡器、交换机等设备。

性能瓶颈原因定位十分复杂,需抽丝剥茧逐一排除,以上信息仅供参考。

参考资料

https://www.cnblogs.com/insane-Mr-Li/p/10131858.html

https://www.cnblogs.com/JcHome/p/10212051.html

https://www.cnblogs.com/wyf0518/p/11303201.html

NEXT

基于JMH框架性能测试:Lambda真的比For性能好吗?

猜你喜欢

转载自blog.csdn.net/qq_28540443/article/details/107304846