1.影响性能考虑点包括:
数据库、应用程序、中间件(tomcat、nginx)、网络和操作系统等方面。
首先考虑自己的应用属于 CPU密集型 还是 IO密集型
cpu密集型
计算,排序,分组查询,各种算法
IO密集型
网络传输,磁盘读写,数据库,redis
2.JVM监控
因为JVM的 本地方法栈 程序计数器 虚拟机栈 是由JVM自动回收的,所以这里不需要进行调优,我们所说的调优,是 堆调优
内存分配模型
具体去看我的 JVM文章
JConsole与 jvisualvm工具
输入这个命令
jvisualvm工具
cmd命令
运行:正在运行的
休眠:sleep
等待:wait
驻留:线程池里面的空闲线程
监视:阻塞的线程,正在等待锁
下载常用插件
根据显示,我的这个应用是IO密集型的,CPU占用不高 ,而内存消耗大,说明就是传输数据的应用
3.性能压测 - 优化 -中间件对性能的影响
怎么优化
使用JMeter 进行压力测试
3.1 压测 Nginx
创建线程组 ,勾选循环次数永远 来达到不断监测的效果
配置好
然后去虚拟机先打开CPU检测
docker stats
打开监控以后,开始压测
说明Nginx属于CPU计算型,不占内存,但是需要线程来进行操作转发
压测内容 | 压测线程数 | 吞吐量/s | 90%响应时间 | 99%响应时间 |
Nginx | 50 | 7459.9 | 10 | 48 |
GateWay | 50 | 2967.5 | 24 | 40 |
简单服务 | 50 | 10461.5 | 6 | 78 |
首页一级菜单渲染 | 50 | 488(db,thymeleaf) | 196 | 369 |
首页渲染(开缓存) | 50 | 1092 | 81 | 149 |
首页渲染(开缓存,优化数据库,关日志) | 1200 | 70 | 132 | |
三级分类数据获取 | 50 | 9.9(db)/15(优化后·) | 5432 | 5855 |
首页全量数据获取 | 50 | 20 | 3175 | 3923 |
Nginx+GateWay | 50 | |||
Gateway+简单服务 | 50 | 2210 | 51 | 102 |
全链路 | 50 | 113.8 | 49 | 86 |
中间件越多,性能损失越大,大多都损失在网络交互了
解决方案:
1.提高中间件的性能
2.买更好的网线
3.买更好的网卡
优化业务
业务功能:
- DB(MYSQL 优化)
- 模板渲染速度(Thymeleaf) 打开缓存
- 静态资源
3.2 压测网关
因为404 返回这个,不过没关系,我们打开 jvisualvm
一直在进行垃圾回收
3.3 压测服务
写了个测试接口返回 hello