文章目录
- 一、性能指标
- 二、JMeter 的使用
- 三、 性能监控
- 3.1 监控堆内存
- 3.2 JConsole
- 3.3 JVisualVM
- 四、性能优化
压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。
使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏,并发与同步。
有效的压力测试系统将应用以下这些关键条件:重复,并发,量级,随机变化。
一、性能指标
指标 | 说明 |
响应时间(Response Time: RT) | 响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。 |
HPS (Hits Per Second) | 每秒点击次数,单位是次/秒。 |
TPS (Transaction per Second) | 系统每秒处理交易数,单位是笔/秒。 |
Qps (Query per Second) | 系统每秒处理查询次数,单位是次/秒。 |
最大响应时间(Max Response Time) | 指用户发出请求或者指令到系统做出反应(响应)的最大时间。 |
最少响应时间(Mininum ResponseTime) | 指用户发出请求或者指令到系统做出反应(响应)的最少时间。 |
90%响应时间(90% Response Time) | 指所有用户的响应时间进行排序,第90%的响应时间。 |
对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS
=QPS
=HPS
,一般情况下用TPS
来衡量整个业务流程,用QPS
来衡量接口查询次数,用HPS
来表示对服务器单击请求。
无论TPS
、QPS
、HPS
,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:
- 金融行业:1000
TPS
~5000OTPS
,不包括互联网化的活动 - 保险行业:100
TPS
~100000TPS
,不包括互联网化的活动 - 制造行业:10
TPS
~5000TPS
- 互联网电子商务:10000
TPS
~1000000TPS
- 互联网中型网站:1000
TPS
~50000TPS
- 互联网小型网站:500
TPS
~10000TPS
从外部看,性能测试主要关注如下三个指标:
- 吞吐量:每秒钟系统能够处理的请求数、任务数;
- 响应时间:服务处理一个请求或一个任务的耗时;
- 错误率:一批请求中结果出错的请求所占比例。
二、JMeter 的使用
添加一个线程组 -> 添加一个HTTP
请求 -> 添加如下3个监听器
启动请求,查看监听器返回:
三、 性能监控
3.1 监控堆内存
JVM
基础:
GC
:
服务器性能诊断和CPU
占用过高处理:
3.2 JConsole
CMD
输入jsonsole
即进入JConsole
,选择进程进入监控:
选择内存这边我们可以具体监控到堆内存某个位置:
JConsole
远程连接容器启动条件:
-Djava.rmi.server.hostname=10.104.28.50 -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=39360 -Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=39360
3.3 JVisualVM
JVisualVM相当于升级版的JConsole,可用于监控内存泄露,跟踪垃圾回收,执行时内存,cpu分析,线程分析…
CMD
输入jvisualvm
即进入JConsole
,选择进程进入监控:
这里我们可以看到各个线程的具体运行状态:
- 运行:正在运行
- 休眠:
sleep
- 等待:
wait
- 驻留:线程池里面的空闲线程
- 监视:阻塞的线程,正在等待锁
工具 -> 插件,可以下载我们需要的插件:
下载GC
插件后我们可以看到更为直观的GC
监控:
四、性能优化
影响性能考虑点包括: 数据库、座用程序、中间件(tomact、Nginx)、网络和操作系统等方面首先考虑自己的应用属于CPU密集型还是IO密集型
- 使用
JVisualVM
对中间件和项目进行CPU
和内存的监控 - 使用
Jemter
对中间件和项目进行压力测试,压力测试表如下(数据来源于网络):
压测内容 | 压测线程数 | 吞吐量/s | 90%响应时间 | 99%响应时间 |
Nginx | 50 | 9501 | 3 | 149 |
Gateway | 50 | 24366 | 3 | 6 |
简单服务 | 50 | 40574 | 2 | 6 |
首页一级菜单渲染 | 50 | 1294(db,thymeleaf) | 63 | 114 |
首页渲染(开缓存) | 50 | 1997 | 30 | 58 |
首页渲染(开缓存,优化数据库,关日志) | 50 | 2617 | 23 | 37 |
三级分类数据获取 | 50 | 22(db)/31(开缓存,优化数据库关日志后) | 2355 | 2848 |
三级分类(优化业务) | 50 | 316 | 269 | 435 |
三级分类(使用redis作为缓存) | 50 | 1942 | 34 | 52 |
首页全部数据获取 | 50 | 34(静态资源) | ||
Nginx+Gateway | 50 | |||
Gateway+简单服务 | 50 | 10313 | 9 | 20 |
全链路 | 50 | 2129 | 9 | 20 |
通过压力测试表我们可以看出
- 中间件越多,性能损失越大,大多都损失到网络交互了;
- 我们可以对
DB
相关进行优化; - 模板的渲染速度和
cpu
和内存有关,开启thymeleaf
缓存; - 使用
Nginx
动静分离也能提高吞吐量; - 业务使用缓存能够大大地的提高性能。