跳转至

引言

性能测试 Performance Test

参考:极客时间高楼老师的性能测试专栏

定义:针对系统的性能指标建立性能测试模型,制定性能测试方案和监控策略,执行性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满足既定值。

目标和意义

  • 验证系统的稳定性和可靠性,识别性能瓶颈和拐点
  • 提供资源和容量规划依据,降低风险,最小化成本
  • 提供应用调优参考,满足用户使用需求,提升用户体验

能力阶梯图

20230829234919

如果测完不调,只能叫作性能验证,通常第三方性能测试机构的工作就是如此

测试流程

20211125161809

  • 定义清晰的测试目标
    • 明确要测的功能、识别关键场景和功能模块
    • 明确性能指标和预期结果
    • 如果线上压测要注意对当前业务的影响,做好相应措施
  • 选择合适的负载模型:正常负载、峰值负载、超负载
  • 测试方案
    • 测试环境:尽可能与生产环境一致,最好线上压测
    • 测试工具
    • 测试数据:自己构造、日志获取
  • 收集、监控
  • 场景执行,观察并记录数据
    • QPS、RT、错误率(Nginx 日志和错误请求)
    • CPU 和 Memory
    • DB 和 Cache 数据写入
    • 接口功能
  • 报告
    • 分析
    • 调优前后的 TPS、RT 以及资源对比图
    • 也要有安全意识,不能随便把数据分享和泄漏给别人

工具

20211125164448

Jemter 脚本维护困难,不支持分布式测试

Locust 系统消耗比较大,二次开发不太好

专业的性能测试团队使用 nGrinder 比较多

场景

20220808163611

业务场景 测试策略 目的
建立性能基线 负载、容量 寻找系统性能拐点
新上线系统验证 并发、负载、容量 系统性能摸底,告警阈值验证
寻找性能瓶颈 负载、容量、极限 不同压力下的性能表现进行对比
性能调优验证 负载、配置 验证性能优化结果,寻找平衡点
批处理能力验证 批处理、高并发 对定时任务或批量处理验证是否满足需求
高可用容灾恢复 并发、浪涌 验证系统的恢复能力和异常情况下的存活时间
系统稳定性验证 负载、稳定性 验证系统长期运行的稳定性及GC相关问题
秒杀抢购 浪涌、并发 验证高并发下系统处理能力

性能分析

通过压力工具生成 TPS、响应时间和错误率等曲线,即可判断出瓶颈是否存在(通常在最大 TPS 之前就会出现)。

再通过分段分层策略,结合监控平台、日志平台,或者其他的实时分析平台,知道架构中的哪个环节有问题,然后再根据更细化的架构图一一拆解下去。

20230830145629

通过曲线找到性能瓶颈

光靠平均值、最大值、最小值、中位数无法确切的分析出压测过程中服务器的具体情况,只有通过分析曲线趋势的合理性,才能判断出性能瓶颈所在的原因。

找到性能瓶颈和拐点,知己知彼,做到心中有数

20240723153956

  • Throughput 吞吐量
  • TPS 每秒事务数曲线:判断容量有多大
  • RT 响应时间曲线:判断业务有多快,性能调优的重要分析对象

另外要判断瓶颈是否与压力有关,TPS 随着压力的变化而变化,那就是有关系,不管压力增不增加,TPS 都会出现曲线趋势问题,那就是无关。

构建分析决策树

分析决策树是对架构的梳理,是对系统的梳理,是对问题的梳理,是对查找证据链过程的梳理,是对分析思路的梳理。它起的是纵观全局,高屋建瓴的指导作用。

  • MySQL

20230830145649

  • 操作系统

20230830145721

性能调优

并发处理
现象:资源空闲,不能充分利用
调优:线程池配置、多线程并发处理、线程锁

数据库
现象:数据库CPU使用率高,慢查询多
调优:使用数据库连接池和缓存技术,优化查询语句,建立索引,分区表等

缓存优化
现象:大量重复请求(数据库、rpc接口、http接口等)
调优:使用本地缓存、Redis、es等,需避免缓存击穿和雪崩等
    出现击穿,可能是key有效期太短,没有起到缓存的作用
    如果大量数据的有效期都是一样的,同时失效,就可能会出现雪崩

MQ
功能测试,可以当成HTTP请求,看MQ后台或日志,发送/接收的消息内容是否缺少
性能测试:并发,看发送/接收情况,看时间戳,消费接收也是一样,看看到底有没有实现并发

资源管理
现象:单项资源使用率过高
调优:合理资源数据库、磁盘、网络、内存等

网络优化
现象:网络阻塞、带宽占满
调优:优化网络传输大小,减少网络使用率,使用CDN、负载均衡等技术

系统架构
现象:单点系统瓶颈
调优:使用微服务架构、分布式系统等,实现系统的水平扩展和负载均衡