性能常识 性能测试技能树

飞天小子 · October 11, 2019 · 416 hits

## 完整的性能测试流程

需求-计划-方案-环境搭建-用例设计-数据准备-场景设计-脚本开发-脚本执行-结果分析-问题反馈-性能调优-结果报告

## 性能测试基础理论

### 性能指标

tps,qps,rps,hps,rt,vu,error

### 测试类型

压力测试,负载测试,并发测试,spike测试,稳定性测试,破坏性测试,验收测试

### 应用领域

#### 能力验证:测试方法:验收测试,可靠性测试,压力测试,失效恢复测试

#### 规划能力:使性能满足增长的用户数的需求。负载,配置,压力测试

#### 性能调优:确定基准环境,负载,性能指标

#### 瓶颈发现:无可参照的指标,重现和定位性能瓶颈。并发测试

#### 基准比较:敏捷流程,固定迭代,比较结果

性能测试工具

** jmeter**

jmeter工作原理

常用的元件,插件

jmeter如何设计脚本(线程组,定时器,参数化,关联,断言)

jmete的典型性能测试场景

### 其它工具

lr,wrk,ab,httpload,webbench,siege

服务器/中间件

JVM

   JVM原理和配置、堆栈原理、GC原理、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连接池

性能测试分析

### 错误提示分析

   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进行存储

合并请求

串行改并行

同步改异步

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up