首页 > 其他分享 >《软件性能测试分析与调优实践之路》(第2版) 读书笔记(二)总体介绍(下)-真正从性能分析与调优来看性能测试

《软件性能测试分析与调优实践之路》(第2版) 读书笔记(二)总体介绍(下)-真正从性能分析与调优来看性能测试

时间:2024-08-19 10:50:37浏览次数:13  
标签:压测 性能 实践 调优 测试 软件

《软件性能测试分析与调优实践之路》(第2版)  是清华大学出版社出版的一本图书,作者为张永清,全书共分为9章,如下图所示

 图书介绍:《软件性能测试分析与调优实践之路》(第2版) 

本文是接着 

《软件性能测试分析与调优实践之路》(第2版) 读书笔记(一)总体介绍(上)-真正从性能分析与调优来看性能测试

继续往下讲。

6)、性能分析与调优实践(索引与分库分表)

分库分表时,插入数据时,可以按照如下图所示的方式来进行分库分表的写入数据。

查询数据时可以按照如下图所示的方式来进行查询,下图中的路由表非常的关键,用于能快速的定位到需要查询的数据是在哪个分库和分表中。

 

 

7)、性能分析与调优实践(层层过滤)

   层层过滤的重点如下:

  • 在不同的层级尽可能过滤掉对应层级的所有该过滤的无效请求,让最末端进入到数据库中的请求都是有效的请求。
  • 错误前置,提前抛出异常。对于异常的请求,越早抛出异常,越有利于减轻系统的处理能力和节省资源的占用。
  • 避免重复请求以及通过机器人的恶意请求,从而降低系统的处理压力,更好的保护系统。《软件性能测试分析与调优实践之路》(第2版) 读书笔记

7、性能分析与调优实践(常见性能问题)

1)、性能指标曲线频繁出现大幅度抖动

  • (1)系统可能在频繁的出现Full GC。Full GC是Java 应用程序垃圾回收的一种机制,一般如果出现了Full GC,应用程序就会出现短暂的停顿。关于Full GC的介绍,可以参考纸质书5.1.7小节中的介绍。此时可以先去看一下应用程序的GC日志,如果是Full GC 非常频繁,并且又没有出现内存泄漏,那么可以参考纸质书5.4.1 小节中介绍的如何减少GC 来解决这个问题。《软件性能测试分析与调优实践之路》(第2版) 读书笔记
  • (2)系统某一次查询、修改或者删除数据耗时很长,导致了整体性能的不稳定。比如,在性能压测查询时,大部分参数化传入的参数,查询出来的结果数据都很少,但是可能某几个参数查询出来的数据量非常大,导致系统在处理这些数据量大的数据时耗时较长。《软件性能测试分析与调优实践之路》(第2版) 读书笔记
  • (3)系统在查询时,可能有时候能命中缓存,有时候命不中缓存。命中缓存时,查询会很快;不能命中缓存时,需要去查询数据库,但是查询数据库的时间肯定比缓存长,所以就会造成系统性能的不稳定。通常情况下数据库也会有缓存,如果命中了数据库的缓存,查询也会更快;如果没有命中,那查询的耗时肯定也会变久。《软件性能测试分析与调优实践之路》(第2版) 读书笔记
  • (4)如果系统是分布式部署,那么可以检查一下分布式处理系统中每个节点的处理能力是否一致,如果不一致,可能也会导致系统频繁抖动。《软件性能测试分析与调优实践之路》(第2版) 读书笔记
  • (5)服务器连接不够用导致的连接批量释放然后再突然批量连接,一旦批量释放连接后,系统TPS马上就会上涨,因为此时可以建立连接了。当连接满了后,请求就无法处理了,从而不得不等待,进而造成TPS突然下降。

2)、在提高并发用户数时,系统的TPS和平均响应时间一直无法提升 

 

通常,检查后会发现应用服务器的CPU、内存等资源都没有达到使用的上限,但是系统却出现了处理的瓶颈,那么说明系统一定是有地方“堵住了”。此时需要继续做如下检查:

  • (1)性能压测时,点击率是否真的上来了。如果点击率或者单位时间内的请求数没有上来,那说明是压测机器无法提供更大压测能力。尤其在大型的分布式系统中,单台压测机往往是不够用的,因为单台压测机不论是网络连接,还是带宽以及自身CPU、内存等都会存在很大限制,性能压测不止是服务器资源会有很大消耗,提供压测能力的压测机也会很大的资源消耗。
  • (2)检查网络带宽的使用情况,排查瓶颈是否因为网络带宽限制而导致。此时,需要检查网络带宽的环节包括压测机到Web服务器、Web服务器到应用服务器、应用服务器到数据库服务器等所有存在网络请求交互的地方。如下图所示。(《软件性能测试、分析与调优实践之路》(第2版),作者张永清,转载请注明出处)

  • (3)参考纸质书5.3.2小节中使用jstack命令行工具,查看Java系统的线程堆栈,从线程堆栈中直接分析当前系统的瓶颈是因为在等待什么资源,而且该资源可能是一个隐形的不容易发现的资源。
  • (4)如果对于第(3)点运用不熟的话,可以用最笨的方式就是根据请求处理的链路过程,从上而下或者从下而上按顺序去排查。此时需要坚信一点,系统肯定是“堵在什么地方了”,仔细通过checklist去检查,一定能够找到这个“堵住”的位置。这就如同自来水的供水系统一样,如果某个用户突然反馈说,我家自来水水压很小,水压一直都上不去,那么自来水公司的维修人员上门之后,肯定是从这个用户家作为起点,然后对供水链路中的每个环节进行排查,直到找到是哪个环节出现了拥堵。 (《软件性能测试、分析与调优实践之路》(第2版),作者张永清,转载请注明出处)
  • (5)如果按照前面四点还是找不到问题原因的话,那么可以尝试减少中间环节从而减少不确定因子的影响,再进行压测对比,先确定问题可能的范围,然后再在某个明确的范围内查找具体的原因。比如如图所示,将Web服务器去掉,让压测机的请求直接对应用服务器进行压测。如下图所示。

3)、提高并发用户数时,系统的TPS缓慢下降且平均响应时间缓慢上升 

当系统出现TPS下降而平均响应时间缓慢上升,可能是系统已经出现了性能的拐点,达到了最大的处理能力了。此时需要做一下如下检查

  • (1)应用服务器资源,比如CPU、内存、IO等是否已经达到了使用上限。
  • (2)数据库服务器的资源以及数据库的链接数等是否已经达到了使用上限。
  • (3)如果第(1)点或者第(2)点中的资源使用已经达到了上限,可以对服务器资源进行扩容后,再重新继续压测。通常情况下,性能出现拐点时,服务器中某项资源也达到了使用的上限。

4)、性能压测过程中,服务器内存资源使用率一直在逐步缓慢上升,随着性能压测的持续进行,从来不会出现下降或者在一定范围内小幅度波动,并且此时TPS也在缓慢下降 

 

 

当出现这种情况时,很有可能是出现了内存泄露,此时可以做如下检查:

  • (1)查看系统日志,看看有没有内存溢出的报错信息。
  • (2)在性能压测过程中参考使用纸质书5.2.1小节中的jconsole或者5.2.2小节中的jvisualvm来进一步定位Java JVM 是否存在内存泄露。(《软件性能测试、分析与调优实践之路》(第2版),作者张永清,转载请注明出处)
  • (3)如果存在JVM 内存泄露,可以参考使用纸质书5.3.3小节中的MemoryAnalyzer工具来进一步分析是代码中哪个地方出现了内存泄露。
  • (4)性能压测过程中,当并发用户数和点击率不变的情况下,服务器的资源消耗应该是在一个稳定的范围内,或者在一定范围内不断地小幅度波动,这才是比较正常的。
  • (4)如果第(3)点无法排查到具体的问题,可以参考纸质书1.6.1小节中的分层分析的方式来定位问题。

5)、在分布式部署环境下的性能压测过程中出现每台应用服务器CPU或者内存资源消耗相差太大 

当出现这种现象时,可以做如下排查:

  • (1)检查每台应用服务器的硬件配置是否一致。(《软件性能测试、分析与调优实践之路》(第2版),作者张永清,转载请注明出处)
  • (2)检查每台应用服务器的操作系统,应用软件、数据库软件、JDK软件等版本以及配置信息是否一致。(《软件性能测试、分析与调优实践之路》(第2版),作者张永清,转载请注明出处)
  • (3)如果第(1)点和第(2)点都没问题,检查Web服务器转发请求到应用服务器的负载均衡是否均匀。比如Nginx配置中是否有转发的权重不一致,或者有ip_hash等的配置限制,具体可以参考纸质书3.1.1小节中的介绍。

标签:压测,性能,实践,调优,测试,软件
From: https://www.cnblogs.com/laoqing/p/18366897

相关文章

  • 秒开WebView?Android性能优化全攻略
    在如今的移动应用时代,用户体验的好坏直接关系到应用的成功与否。而在众多的用户体验因素中,应用的加载速度尤其重要。特别是对于使用 WebView 加载网页的应用,如果加载速度过慢,用户往往会产生不满,从而流失。因此,实现“秒开”WebView成为了开发者必须面对的一项挑战。本文将深......
  • 【软件测试】2023年职业院校技能大赛高职组“软件测试”赛项样题
    目录一、竞赛时间、内容及成绩组成二、竞赛须知三、任务说明(一)竞赛环境(二)竞赛任务文档(三)任务组成任务一:单元测试(10分)任务二:设计功能测试文档(15分)任务三:功能测试(25分)任务四:自动化测试(20分)任务五:性能测试(20分)任务六:接口测试(5分)四、竞赛结果提交一、竞赛时......
  • 性能问题分析的通用方法
    有同学问了这样一个问题:用JMeter执行压测,1000线程组,最后几个请求卡住了。网上的资料说可能是内存问题,因此将堆内存从2G改为了4G,重新尝试依然会卡住,有没有什么办法调整资源解决这个问题?我仔细看了他的聚合报告,Max-rt已经到了70000+ms级别,且响应时间分布图峰谷值差距很大,于是便......
  • 超硬核!一篇文章说全、说全磁盘性能测试工具-Fio
    Part1 什么是FioFio(FlexibleI/OTester)是一款由Axboe开发的一款开源磁盘I/O性能测试工具,目前支持Linux及Windows平台,目前已发布的最新版本为3.37。Fio允许你生成许多线程或进程,执行指定的特定类型的I/O操作来模拟不同的I/O负载场景。Fio官方网站:https://fio.readthedoc......
  • 生成式人工智能大模型备案-测试题集和词库
    围绕模型不应拒答的问题建立非拒答测试题库:非拒答测试题库应具有全面性,总规模不宜少于500题,从应改为宜。非拒答测试题库应具有代表性,应至少覆盖我国制度、信仰、形象、文化、习俗、民族、地理、历史、英烈等方面,以及个人的性别、年龄、职业、健康等方面,每一种测试题库均不宜......
  • 深入探究 Java 中的单元测试 Mock 技术
    在软件开发中,单元测试是确保代码质量和稳定性的重要手段。而Mock技术在单元测试中扮演着至关重要的角色,它能够帮助我们隔离外部依赖,更有效地对单个模块进行测试。本文将深入探讨Java中的单元测试Mock技术。一、单元测试与Mock技术概述单元测试是对软件中的最小可测试......
  • Github 通义千问模型测试
    通义千问大模型安装相关地址https://github.com/QwenLM/Qwen2-Audio/blob/main/README_CN.mdPSC:\Users\supermao>pipinstallmodelscopePSC:\Users\supermao>modelscopedownload--modelqwen/Qwen2-Audio-7B-InstructDownloading:100%|█████████████......
  • 使用 JMeter 进行压力测试
    原文:使用JMeter进行压力测试一、前言压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤,下面我带大家来使......
  • 【PID控制】针对扭转系列弹性驱动器的力矩控制策略基准测试研究(Matlab代码实现)
      ......
  • MySQL中处理JSON数据案例示范和常见问题以及性能优化
    随着大数据技术的快速发展,数据格式和存储方式也变得越来越多样化。在业务系统中,很多数据经常以JSON格式存储。为了高效处理这些JSON数据,MySQL自5.7版本开始原生支持JSON数据类型,并在后续版本中不断扩展和优化相关功能。本文将以电商交易系统为示例,深入探讨MySQL在处理JSON数......