需求 - 计划 - 方案 - 环境搭建 - 用例设计 - 数据准备 - 场景设计 - 脚本开发 - 脚本执行 - 结果分析 - 问题反馈 - 性能调优 - 结果报告
重点关注响应时间,吞吐量,错误率
点击查看>>性能指标
压力测试,负载测试,并发测试,spike 测试,稳定性测试,破坏性测试,验收测试,失效恢复测试
能力验证:测试方法:验收测试,可靠性测试,压力测试,失效恢复测试
规划能力:使性能满足增长的用户数的需求。负载,配置,压力测试
性能调优:确定基准环境,负载,性能指标
瓶颈发现:无可参照的指标,重现和定位性能瓶颈。并发测试
基准比较:敏捷流程,固定迭代,比较结果
注:重点关注 jmeter 生成压力的原理以及压力场景的设计
点击查看>>jmeter 系列
点击查看>>jjmeter 基础线程组设计压力值
点击查看>>jjmeter 实战分析并发、RPS、RT 公式换算
点击查看>>j 压测实战分析性能拐点
点击查看>>j 负载测试统计超时率
点击查看>>jjmeter 线程与并发数之间的关系
点击查看>>j 深度剖析阶梯加压
点击查看>>j 负载测试保证业务连贯性
点击查看>>spike 测试场景设计
重点关注 GC 原理,GC 频率
点击查看>>jvm 内存空间与 gc 机制
点击查看>>jvm 内存参数设置
Tomcat
点击查看>>tomcat 中间件调优指南
Nginx
点击查看>>nginx 环境配置
Dubbo
服务注册、消息队列
点击查看>>剖析 cpu 负载和 cpu 利用率 重点关注 cpu 负载和利用率关系
点击查看>>剖析 cpu 上下文切换对负载的影响 重点关注上下文切换,系统调用,进程切换
点击查看>>cpu 瓶颈分析思路 全局分析可能导致 cpu 瓶颈的原因
点击查看>>简单聊聊 IO 瓶颈 分析导致 IO 瓶颈的原因
点击查看>>浅析 swap 内存交换 swap 内存交换对性能的影响
锁,索引,读写分离,分库分表,Nosql
就绪 (Runnable),运行 (Running),阻塞 (Blocked)
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 进行存储
合并请求
串行改并行
同步改异步