基础:
完整的性能测试流程
需求-计划-方案-环境搭建-用例设计-数据准备-场景设计-脚本开发-脚本执行-结果分析-问题反馈-性能调优-结果报告
性能指标
TPS,QPS,RPS,HPS,RT,VU,ERROR
测试类型
压力测试,负载测试,并发测试,spike测试,稳定性测试,破坏性测试,验收测试
工具:
jmeter工作原理
常用的元件,插件
jmeter如何设计脚本(线程组,各种请求,定时器,参数化,关联,断言)
jmeter测试报告
jmete设计典型性能测试场景
其它工具
wrk,ab,httpload,webbench,siege
服务器/中间件
JVM原理和配置、堆栈原理、GC原理、FullGc,OOM
Tomcat配置、使用方法、启动参数配置
Nginx配置、使用方法
Dubbo服务注册、消息队列
服务器硬件资源
cpu,磁盘,网络,内存,load和利用率,IO读写,发包率丢包率
linux性能监听命令
lscpu,uptime,free,vmstat,mpstat,sysstat,netstat,iostat,pidstat,jstack,jmap
数据库
锁,索引,读写分离,分库分表,Nosql
线程状态
就绪(Runnable),运行(Running),阻塞(Blocked)
可能的瓶颈点
硬件,中间件,程序,操作系统,网络设备
cpu,内存,磁盘,网络,jvm,线程池,jdbc连接池
OOM异常信息
OutOfMemoryError: Java heap space (堆内存不够)
OutOfMemoryError: GC overhead limit exceeded (代码内存过大或死循环)
OutOfMemoryError: PermGen space (perm内存不够)
OutOfMemoryError: Direct buffer memory (线程栈太小)
性能测试分析
错误提示分析
OutOfMemoryError: Java heap space (堆内存不够)
OutOfMemoryError: GC overhead limit exceeded (代码内存过大或死循环)
OutOfMemoryError: PermGen space (perm内存不够)
OutOfMemoryError: Direct buffer memory (线程栈太小)
指标监控分析
cpu瓶颈
响应时间慢
空闲时间高(idle)
系统占用高(sys)
用户占用高(usr)
运行队列长(r)
load长期大于cpu个数
内存瓶颈
交换率过高(swap)
系统cpu利用率很高
内存溢出(OOM)
磁盘瓶颈
磁盘利用率高
等待队列过长(avgqu-sz)
等待IO的百分比过高(await))
用于IO的时间比例过高(util)
缓存命中率过低(buffer cache)
JVM瓶颈
fullgc频繁,考虑老年代内存是否太小
YoungGc频繁,考虑年轻代内存是否太小
YoungGc时间过长,程序中出现了大对象, 增加 -XX:PretenureSizeThreshold
GC监控
jstat -class 类加载统计
jstat -compiler 编译统计
jstat -GC 垃圾回收统计
jstat -gccapacity 堆内存统计
jstat -gccnew 年轻代垃圾回收统计
jstat -gccold 老年代垃圾回收统计
jstat -gcnewcapacity 年轻代内存统计
jstat -gcoldcapacity 老年代内存统计
jstat -gcmetacapacity 元空间内存统计
jstat -gcutil gc整体统计
分段排查定位分析
服务器硬件瓶颈->网络瓶颈->应用瓶颈->服务器操作系统瓶颈(参数配置)->中间件瓶颈(参数配置,数据库,web服务器等)
优化方法
使用对象池减少对象创建
增加本地缓存
Nosql进行存储
合并请求
串行改并行
同步改异步
感谢每一个认真阅读我文章的人!!!
我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。需要可以点击下方名片加入群聊大家一起学习交流。群里有大佬可以帮忙解答问题。