电商项目——全文检索-ElasticSearch——第一章——中篇
电商项目——商城业务-商品上架——第二章——中篇
电商项目——商城业务-首页——第三章——中篇
电商项目——性能压测——第四章——中篇
电商项目——缓存——第五章——中篇
电商项目——商城业务-检索服务——第六章——中篇
电商项目——商城业务-异步——第七章——中篇
电商项目——商品详情——第八章——中篇
电商项目——认证服务——第九章——中篇
电商项目——购物车——第十章——中篇
电商项目——消息队列——第十一章——中篇
电商项目——订单服务——第十二章——中篇
电商项目——分布式事务——第十三章——中篇
文章目录
1:压力测试
1.1 基本介绍
在分布式开发中,我们都将微服务拆分成一个个独立的模块,每一个微服务模块在上线之前,或者之后,都要对他进行压力测试。压力测试就是为了寻找在我们当前的软硬件环境下,最大的负荷量和系统瓶颈,知道了这个系统瓶颈,我们就可以通过负载均衡的配置,避免在单位时间之内给系统发送太多的请求,导致这个系统被压垮,导致不可用。
压力测试做到我们当前系统有一个衡量的指标,它可以承受多大的压力,如果我们要求编写一个高并发的接口,如果我们压力测试,性能没有达到要求,我们还可以参照压力测试的性能指标,来分析接口的问题在哪,去优化我们的接口,如下是我们需要掌握的性能指标
吞吐量大了,说明我们支持高并发;
响应时间小了,说明我们接口性能好;
1.2 Apache JMeter安装使用
第一步:下载Jmterzip包,然后压缩,点击.bat命令即可
http://jmeter.apache.org/download_jmeter.cgi
第二步:创建测试计划
右击TestPlan,添加,线程,线程用户组
选中线程组,200,10,100代表10秒内完成200个线程请求,然后一个线程循环100次
然后点击线程组,右键,取样器,hhtp请求,会创建一个http请求(http,www.baidu.com 80),然后进行压力测试
想要看测试指标,除了添加取样器,我们要看测试结果,我们要添加监听器(比如,查看结果数,汇总报告——》每一列都很重要)聚合报告,汇总图)
我们的监听器帮都用上面我讲的那几个
点击运行,进行保存,查看监听器
用完必须点击清除数据
我们上面测试的是百度,接下来我们测试自己写的mall.com
1s=1000ms,底下的值都是以ms为单位
根据上面的结果,可以知道我的接口非常需要优化,异常80%
如果我们直接访问主机ip地址+端口发现,效果会比直接访问mall.com好
原因:中间件都是影响性能的原因,我们直接访问ip地址+端口不需要中间件,如果访问mall.com要经过nginx等中间件
如上就是我们一个简单的测试和简单的调优,真正的接口优化牵扯到的方面也很多,下面我们一一道来
1.3 JMeter在windows下地址占用bug解决
2:性能监控
2.1 堆内存与垃圾回收
参考文章
深入理解Java虚拟机——Java虚拟机介绍——第一章
2.2 jvisualvm使用
推荐使用 jvisualvm
3:优化
3.1 中间控件对性能的影响
我们接下来对如下的两个接口进行性能优化,在优化之前,我们要考虑两个问题
我们在发送mall.com请求的一开始,比需要先经过nginx的中间件,在转交给后台服务集群的网关gateway中间件,在把请求转交给后台服务集群(商品,订单服务等),等服务集群处理完成后再返回给网关,nginx,最后在返回给前端页面。我们在真正的功能执行前经过了两个中间件,那么它对我们有没有影响呢?我们进行如下测试
使用如下命令查看docker容器中的内存信息
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
714cbb2558f9 mysql 0.11% 217.3MiB / 3.701GiB 5.73% 25.8MB / 77MB 27.8MB / 1.26GB 40
1b1d0be002c3 kibana 0.00% 357.5MiB / 3.701GiB 9.44% 8.06MB / 5.49MB 9.23MB / 12.3kB 22
2ed108071a4c nginx