一.知识回顾

二.性能优化

2.1考虑影响服务性能的因素

数据库、应用程序,中间件(Tomcat,Nginx),网络和操作系统等

我们还得考虑当前的服务属于

  • CPU密集型:计算比较影响性能—>添加CPU,加机器
  • IO密集型:网络IO,磁盘IO,数据库读写IO,Redis读写IO --》缓存,加固态硬盘,添加网卡

2.2 JVM相关知识的回顾

JVM的内存结构

nginx压力测试有429_jvisualvm安装GC插件

JVM中对象的存储和GC

nginx压力测试有429_nginx压力测试有429_02

nginx压力测试有429_Gateway压力测试_03

三.jconsole和jvisualvm

  jconsole和jvisualvm是JDK自带监控工具。可以帮助我们更好的查看服务的相关监控信息,jvisualvm功能会更加的强大些。

3.1 jconsole

搜索jconsole运行命令

nginx压力测试有429_jvisualvm安装GC插件_04


进入jconsole的界面

nginx压力测试有429_jvisualvm安装GC插件_05


找到需要监控的进程,进入界面

nginx压力测试有429_nginx压力测试有429_06

进入对应的进程

界面概览

nginx压力测试有429_Gateway压力测试_07


堆内存信息

nginx压力测试有429_jvisualvm安装GC插件_08


线程详细信息

nginx压力测试有429_jmeter压力测试_09

类的详细信息

nginx压力测试有429_jvisualvm安装GC插件_10

3.2 jvisualvm

因为是jdk6.0后自带的,我们同样的可以在cmd或者搜索框中找到

nginx压力测试有429_jvisualvm安装GC插件_11

进入主页面

nginx压力测试有429_nginx压力测试有429_12

找到对应的进程,双击进入

nginx压力测试有429_jmeter压力测试_13

查看对应的监视信息

nginx压力测试有429_Gateway压力测试_14

添加Visual GC插件。

nginx压力测试有429_nginx压力测试有429_15

如果下载插件提示如下的错误,需要更新下载地址

nginx压力测试有429_Gateway压力测试_16

先查看Java版本

nginx压力测试有429_jvisualvm安装GC插件_17


进入到Visualvm官方网站,进入plugins中

nginx压力测试有429_jvisualvm安装GC插件_18


进入插件中心

nginx压力测试有429_nginx压力测试有429_19

找到与自己JDK对应的下载地址

VisualVM官方网站

nginx压力测试有429_Gateway压力测试_20

点击设置,更新插件中心地址

nginx压力测试有429_Gateway压力测试_21

重新安装我们的Visual GC插件。—》安装成功

nginx压力测试有429_Gateway压力测试_22

安装成功

nginx压力测试有429_Nginx实现动静分离_23

安装好之后重启jvisualvm,进入监控界面,可以看到我们安装的插件

nginx压力测试有429_Nginx实现动静分离_24

四. 各个请求链路节点中的压力测试

  以下是一个完整的请求链路

nginx压力测试有429_jmeter压力测试_25

4.1 Nginx压力测试

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

Nginx

100

5,184.43

33

96

nginx压力测试有429_jvisualvm安装GC插件_26

4.2 网关gateway压测

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

Gateway

100

20,176.133

8

14

nginx压力测试有429_Nginx实现动静分离_27

4.3 单独模块服务测试

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

单独测试服务

100

28,208.977

5

9

编写测试接口

nginx压力测试有429_Gateway压力测试_28


先简单的访问测试一下

nginx压力测试有429_jvisualvm安装GC插件_29


然后再使用jmeter进行测试

nginx压力测试有429_Nginx实现动静分离_30

数据展示

nginx压力测试有429_Gateway压力测试_31

4.4 Gateway网关和服务模块

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

Gateway+服务

100

9,360.128

22

58

网关模块配置请求接口的断言,重启项目

nginx压力测试有429_jvisualvm安装GC插件_32


先测试一下通过网关访问服务接口

nginx压力测试有429_Gateway压力测试_33

jmeter测试

nginx压力测试有429_nginx压力测试有429_34

结果数据展示:

nginx压力测试有429_jvisualvm安装GC插件_35

4.5 Nginx+Gateway+服务

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

Nginx+Gateway+服务

100

2,437.736

49

61

先简单访问一下是否可行

nginx压力测试有429_nginx压力测试有429_36


修改jmeter访问参数

nginx压力测试有429_Nginx实现动静分离_37

压测效果:

nginx压力测试有429_jvisualvm安装GC插件_38

4.6 业务逻辑-一级菜单压测

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

一级菜单

100

199.876

532

542

设置jmeter测试参数

nginx压力测试有429_nginx压力测试有429_39

压测后数据展示

nginx压力测试有429_jmeter压力测试_40

4.7 业务逻辑-三级菜单压测

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

三级菜单

100

10.562

14,556

21,744

设置jmeter测试参数

nginx压力测试有429_jvisualvm安装GC插件_41

压测后数据展示

nginx压力测试有429_jvisualvm安装GC插件_42

补充一下:如果还想要测试获取前端页面的情况,可以在jmeter中怎么设置并测试。

nginx压力测试有429_Gateway压力测试_43

4.8 总结上面各压力测试性能比较

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

Nginx

100

5,184.43

33

96

Gateway

100

20,176.133

8

14

单独测试服务

100

28,208.977

5

9

Gateway+服务

100

9,360.128

22

58

Nginx+Gateway+服务

100

2,437.736

49

61

一级菜单

100

199.876

532

542

三级菜单

100

10.562

14,556

21,744

4.9 优化改进思路

中间件越多,性能损失就越大,大多数的损失都是在数据的交互

简单的优化:

中间件:单个的效率都很高,串联的中间件越多,影响越大,但是在业务面前其实就比较微弱

业务:

添加索引:

nginx压力测试有429_Gateway压力测试_44

  • DB
  • 模板页面渲染

压力测试内容

压力测试的线程数

吞吐量/s

90%响应时间

99%响应时间

Nginx

100

5,184.43

33

96

Gateway

100

20,176.133

8

14

单独测试服务

100

28,208.977

5

9

Gateway+服务

100

9,360.128

22

58

Nginx+Gateway+服务

100

2,437.736

49

61

一级菜单

100

199.876

532

542

三级菜单

100

10.562

14,556

21,744

一级菜单(DB-索引)

100

62

26

35

三级分类压测(索引)

100

4

10745

16424

首页全量数据(DB-Themleaf-放开缓存)

100

15

崩盘

崩盘

五.Nginx实现动静分离

  通过上面的压力测试我们可以发现如果后端服务及处理动态请求又处理静态请求那么他的吞吐量是非常有限的,这时我们可以把静态资源存储在Nginx中。

nginx压力测试有429_Gateway压力测试_45

5.1 静态资源存储

进入nginx挂载目录下的html目录下,新建一个文件,static,然后将压缩好的静态文件上传到该路径下。

nginx压力测试有429_jvisualvm安装GC插件_46


上传静态资源

nginx压力测试有429_nginx压力测试有429_47


nginx压力测试有429_jvisualvm安装GC插件_48

  解压静态资源文件

unzip index.zip

nginx压力测试有429_nginx压力测试有429_49

删除idea下的index目录

nginx压力测试有429_Nginx实现动静分离_50

然后修改模板文件中的资源访问路径

nginx压力测试有429_Nginx实现动静分离_51


启动访问测试一下

nginx压力测试有429_jmeter压力测试_52

5.2 Nginx配置

  在Nginx的配置文件中指定static开头的请求的处理方式,保存后重启Nginx服务,然后就可以访问了

nginx压力测试有429_jmeter压力测试_53

再次访问页面,成功

nginx压力测试有429_jvisualvm安装GC插件_54