jmeter性能测试实例3解析--性能瓶颈分析过程
- 场景要求
1、用户登陆---每个用户登陆一次(仅一次控制器)
2、压测试接口获取门店列表
- 性能场景指标
1、验证最大在线用户数--(负载测试)
2、错误率<0.5%
3、请求响应时间<2S
4、场景运行时间10分钟--不需要 同步定时器
5、服务器资源使用合理(cpu使用率<80%,内存使用率<80%)
- 脚本设计如下:
- 运行结果及分析流程
1、运行场景--聚合报告(重要指标:响应时间、错误率、吞吐量)99%用户登陆响应时间超过2S,未达标
2、top命令查看服务器资源,看具体监控数据:发现cpu过高,哪个进程占cpu?
cpu包含:sys系统、usr用户、idle空余、io%输入输出
(top命令)第一个红框是百分比,第二个红框是总共,例如若8核cpu服务器下面红框内最高可达800%
load average:cpu分别在1/5/15分钟内的平均负载值。若8核这里达到可以短暂的超过8没问题,但不要持续时间过长
发现,usr用户进程使用率高,是哪个进程导致这样高的cpu使用率
3.1、若是mysql高,原因:第一可能是库、表设计不合理;第二可能索引问题;第三可能死锁、大表、慢查询问题
-- 查询慢查询次数 show status LIKE 'slow_queries'; -- 查询主从延时时间 show slave STATUS -- 查看慢查询日志是否打开 show variables LIKE 'slow_query_log'; -- 查看慢查询日志的路径 /var/log/mysql/slow.log show variables LIKE '%slow_query_log%'; -- 查看慢查询阈值,value单位为秒 show variables LIKE 'long_query_time'; -- 慢查询记录表 SELECT * from mysql.slow_log -- 设置慢查询时间 setlong_query_time=2; -- 使用explain来分析sql语句实现优化 主要关注type、key、rows两列 EXPLAIN 具体sql语句;
优化前:EXPLAIN 具体sql 如下图, 主要关注type、key、rows几列,key未设置主键,rows扫描记录数过多
优化(加主键)后:EXPLAIN 具体sql 如下图,rows=1 性能会大大提升
3.2、若是java root 进程比较高
查看该进程79478对应的线程,此时用命令“top -H -p 进程号PID”来查看具体哪个服务高;top -H -p 79478 结果如下:
(注:java进程里容易出现的性能问题:线程死锁、堆内存溢出(具体哪个对象)、GC年轻态 还是 年老态、jar包问题)
3.3、若是redis(缓存服务器)问题
3.3、若是nginx问题,权重设计是否到位
3.3、若是tomcat问题
3.3、若是mq问题
- 分析流程总结:
现象:Jmeter请求响应时间长
1、服务器资源使用情况:top
2、哪个进程占用资源高(mysql):top -H -p PID
3、阿里云服务器性能监控(数据库)分析:得知慢sql
4、查看关键指标:EXPLAIN
5、打开相应日志