性能测试项目实战四: 性能测试分析和调优

性能调优的步骤

  1. 确定问题:根据性能监控的数据和性能分析的结果,确定性能存在的问题(要求)
  2. 确定原因:确定了问题之后,对问题进行分析,找出问题产生的原因
  3. 给出解决方案:确定调整目标和解决方案(改服务器参数配置/增加硬件资源配置/修改代码)
  4. 验证问题:按照给出的解决方案,重新进行测试
  5. 分析调优结果:分析出问题的性能指标是否有提升,关注其他指标未下降

注意性能测试调优并不是一次完成的过程,针对同一个性能问题,上面的五步可能要经过多次循环才

能最终完成性能调优的目标(即:测试发现问题-找原因-调整-验证-分析-再测试。。。)

性能瓶颈分析

图片[1] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

1.服务器资源分析

查看CPU状态:top

图片[2] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

查看内存状态:vmstat

实际内存:查看内存使⽤百分⽐,检查是否超过80%

虚拟内存:查看swap的si和so是否为0,如果不为0,说明内存可能不⾜

图片[3] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

查看磁盘IO状态:iostat -x 1 1

关注是磁盘读⼊和写出的速度,不是磁盘⼤⼩。

%util⾼,说明磁盘⻓时间占⽤CPU在发送数据,说明磁盘传输速度不⾜,存在瓶颈

%iowait⾼,说明磁盘IO传输数据的任务很多,在等待,说明磁盘传输速度不⾜,存在瓶颈

查看网络状态:sar -n DEV 1 2

2.数据库分析

慢查询:

找出查询速度慢的sql语句,慢:查询时间超过设置的阈值

图片[4] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

数据库连接池:

查看方法:

  • 最大连接数:show variables like “max_connections”
  • 当前使用的连接数:show status like “threads_connected”

测试点关注点:

  • 关注:利用率 = 当前使用的连接数/最大连接数 ,建议:85%左右
  • 如果利用率超过85%,连接池可能会被占满
  • 如果利用率过低,说明资源存在浪费,可能会影响其他性能指标

mysql锁

图片[5] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光
图片[6] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

3.JVM瓶颈分析

图片[7] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光
图片[8] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光
图片[9] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光
图片[10] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

4.压测机瓶颈分析

图片[11] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

性能调优案例

案例1 – 获取首页数据

问题分析:

1.CPU已接近100%

2.一次请求中需要查询很多数据

解决方案:

Ø提升服务器配置

Ø分批次、异步加载首页数据,首页底部的数据(如:新品首发、热卖商品、专题精选等数据)等用户向下滑动页面时再加载

案例2 – 查看商品详情

场景描述:

Ø进入商品详情页面时,加载商品的详细信息

图片[12] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

问题分析:

1.网络带宽已跑满

2.一次请求中返回了全部数据

解决方案:

Ø提升服务器网络带宽

Ø分批次、异步加载商品数据

案例3 – 搜索商品

场景描述:

Ø进入首页,在搜索框中输入关键字搜索商品

测试结果数据:

Ø搜索关键字“床”时,出现慢查询SQL语句

Ø查看慢查询语句cat /var/lib/mysql/localhost-slow.log,包含如下SQL语句

图片[13] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

问题分析:

1.找出搜索商品接口对应的SQL语句(通过查看代码实现或者从日志中获取查询SQL)。

2. 分析具体的SQL语句

3.定位问题

Ø当搜索关键字匹配到大量的商品时,第3条SQL语句会返回大量重复数据

Ø 第4条SQL语句中的in查询条件中同样包含大量重复的商品分类id

Ø因此:第4条SQL会出现查询时间较长,是由于第3条SQL返回的ID有大量重复

解决方案:

Ø优化第3条SQL语句,因该SQL语句的查询结果大部分都是重复的,可以进行去重处理

图片[14] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

案例4 – JVM内存溢出

场景描述:

Ø请求测试接口(/wx/index/oom),模拟内存溢出

图片[15] - 性能测试项目实战四: 性能测试分析和调优 - 正则时光

问题分析:

1.JVM内存占用随着时间的推移占用越来越多,直至内存溢出,系统退出

解决方案:

Ø排查代码存在的问题,及时释放无用的对象

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享