文章目录

  • 一、性能指标
  • 二、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来表示对服务器单击请求。

无论TPSQPSHPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:

  • 金融行业:1000TPS~5000OTPS,不包括互联网化的活动
  • 保险行业:100TPS~100000TPS,不包括互联网化的活动
  • 制造行业:10TPS~5000TPS
  • 互联网电子商务:10000TPS~1000000TPS
  • 互联网中型网站:1000TPS~50000TPS
  • 互联网小型网站:500TPS~10000TPS

从外部看,性能测试主要关注如下三个指标

  • 吞吐量:每秒钟系统能够处理的请求数、任务数;
  • 响应时间:服务处理一个请求或一个任务的耗时;
  • 错误率:一批请求中结果出错的请求所占比例。

二、JMeter 的使用

添加一个线程组 -> 添加一个HTTP请求 -> 添加如下3个监听器

jemeter 压测怎么看报错信息 jmeter压测指标_jmeter


启动请求,查看监听器返回:

jemeter 压测怎么看报错信息 jmeter压测指标_缓存_02


jemeter 压测怎么看报错信息 jmeter压测指标_jemeter 压测怎么看报错信息_03


jemeter 压测怎么看报错信息 jmeter压测指标_响应时间_04

三、 性能监控

3.1 监控堆内存

JVM基础:

GC

服务器性能诊断和CPU占用过高处理:

3.2 JConsole

CMD输入jsonsole即进入JConsole,选择进程进入监控:

jemeter 压测怎么看报错信息 jmeter压测指标_jemeter 压测怎么看报错信息_05


选择内存这边我们可以具体监控到堆内存某个位置:

jemeter 压测怎么看报错信息 jmeter压测指标_性能测试_06

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,选择进程进入监控:

jemeter 压测怎么看报错信息 jmeter压测指标_jemeter 压测怎么看报错信息_07


这里我们可以看到各个线程的具体运行状态:

  • 运行:正在运行
  • 休眠: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动静分离也能提高吞吐量;
  • 业务使用缓存能够大大地的提高性能。