性能测试复习
性能测试掌握:
1、性能测试步骤:
(1)、性能需求评审
(2)、了解系统架构,申请测试环境
(3)、制定性能测试方案
(4)、搭建测试环境,准备测试数据
(5)、开发压测脚本
(6)、预压测
(7)、正式压测,并监控服务器资源
(8)、分析性能问题,提供性能测试报告
(9)、配合研发进行优化
(10)、回归性能测试
(11)、提供性能测试报告
2、性能测试工具:jmeter、loadrunner
3、性能监控工具:grafana+prometheus+node_exporter+altermanger
(1)、node_exporter:负责收集服务器资源信息
(2)、prometheus:时序数据库,负责存储数据
(3)、grafana:负责展示数据
(4)、altermanger:负责预警,可以邮件预警、钉钉预警等。
4、性能调优常见几种方法:
1、cpu占用太高(jstat、jstack):
(1)gc(垃圾回收机制问题)
排查方法:
1、top定位cpu占用高的进程号
2、jstat -gcutil -pid 100,可打印100次gc信息,FGCT指标不能大于1秒
(2)死锁
排查方法:
1、top定位cpu占用高的进程号
2、top -H -p 进程号,观察异常进程中的异常线程
3、jstack -l 进程号 > test.txt 导出异常进程的日志信息
4、printf "%x" 线程号 #将线程号转换成16进制,然后打开日志搜索16进制号码即可查到对应线程
2、内存溢出(jmap)
排查方法:
1、top定位内存占用高的进程号
2、jmap -dump:live,format=b,file=test.hprof 进程号 #将进程中的堆栈日志导出来
3、使用mat分析工具对导出的堆栈日志进行分析
3、吞吐量上不去
(1)负载机硬件性能无法支撑大并发
(2)网络问题(内网压测可忽略)
(3)负载机jmeter设置问题(关闭查看结果树可提高吞吐量)
(4)连接池设置太低,包括tomcat、mysql、ngix、redis等
(5)接口存在慢查询
慢查询配置及分析方法如下:
(1)在my.cnf 加入以下配置:
log_output=table #慢查询的记录方式
slow_query_log=1 #1是开启慢查询日志,0是关闭
long_query_time=1 #设置慢查询的阈值(执行速度超过1秒就会被记录在mysql.slow_log中)
(2)配置好之后,在mysql中执行show VARIABLES like '%query%'; 重点看两个变量long_query_time,slow_query_log(on为开启状态,off为关闭状态),慢查询的数据存放在mysql.slow_log中。
(3)修改完my.cnf必须重启mysql服务service mysqld restart 或者 systemctl start mysqld
(4)执行 select sleep(2) 执行时间2秒,超过long_query_time=1,会记录在mysql.slow_log中(此步骤只为测试慢查询配置是否生效)
(5)执行select * from mysql.slow_log order by start_time desc; 看表中是否有数据,如有数据则点击sql_text字段的BLOB右键复制,则可以复制出该条慢查询对应的SQL语句
(6)将慢查询SQL语句复制到编辑器里,选择该SQL语句点击解释按钮,观察type字段,以下是type字段的解释
CONST>EQ_REF>REF>RANGE>INDEX>ALL
CONST 查询索引字段,且表中只有一行匹配
EQ_REF 主键或者唯一索引
REF 非唯一索引
RANGE 索引的范围查询
INDEX 索引
ALL 全表扫描 (效率极低的检索方式)